我有许多无法修改的类。每个都有一个复制构造函数、至少一个其他构造函数和一个函数 foo()
返回一些值。我想制作一个可以从这些类中派生的类模板,并且具有与 foo()
的返回类型相同类型的数据成员(对不起,如果我有一些术语错误)。
换句话说,我想要一个类模板
template<typename T> class C : public T
{
footype fooresult;
};
其中 footype
是 T::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 许可协议
你不需要那个 - 请记住,由于 decltype 不评估它的参数,你可以调用
nullptr
。