Pow*_*mer 2 c++ templates overloading return-type
我正在尝试确定重载成员函数的返回类型,以便稍后在我的函数模板中使用该类型(请参阅下面的示例).无法弄清楚如何使用C++ 11模板机制(不修改下面代码中结构A和B的定义).这是可行的(一般是C++ 11,特别是MSVS2013)以及如何?
struct A{};
struct B{};
struct X
{
double f(A&);
int* f(B&);
};
template<typename T, typename R = /*??? what X::f(T) returns ???*/>
R ff(T& arg)
{
X x;
R r = x.f(arg); // preferably if I can create local variables of type R here
return r;
}
int main()
{
A a; ff(a);
B b; ff(b);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用decltype()它std::declval来模拟创建方法调用表达式所需类型的值:
typename R = decltype(std::declval<X>().f(std::declval<T&>()))
Run Code Online (Sandbox Code Playgroud)
这是一个输出类型ID的演示R ; 你可以看到它正确推断double和int *for ff(a)和ff(b).
旁注:您的模板功能的整个主体可以减少到return X().f(arg);.
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |