获取没有对象的成员函数的返回类型

新手上路,请多包涵

我有许多无法修改的类。每个都有一个复制构造函数、至少一个其他构造函数和一个函数 foo() 返回一些值。我想制作一个可以从这些类中派生的类模板,并且具有与 foo() 的返回类型相同类型的数据成员(对不起,如果我有一些术语错误)。

换句话说,我想要一个类模板

template<typename T> class C : public T
{
  footype fooresult;
};

其中 footypeT::foo() 的返回类型。

如果基类都有,比如说,一个默认构造函数,我可以做

decltype(T().foo()) fooresult;

(使用 GCC 中的 C++0x 功能),但是除了复制构造函数之外,这些类没有任何共同的特定构造函数。

GCC 也不允许 decltype(this->foo()) ,尽管显然有可能将其添加到 C++0x 标准中-有谁知道这种可能性有多大?

我觉得应该可以按照 decltype(foo())decltype(T::foo()) 的方式做一些事情,但这些似乎不起作用:GCC 给出了 cannot call member function 'int A::foo()' without object 形式的错误 --- .

当然,我可以有一个额外的模板参数 footype ,甚至是 T 类型的非类参数,但是有什么方法可以避免这种情况吗?

原文由 James 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 315
1 个回答

你不需要那个 - 请记住,由于 decltype 不评估它的参数,你可以调用 nullptr

 decltype(((T*)nullptr)->foo()) footype;

原文由 Puppy 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题