【发布时间】:2014-02-11 14:41:39
【问题描述】:
假设我有这个函数模板:
template<typename T1, typename T2>
auto DoSomething(const T1& arg);
当然,这个函数需要一个尾随返回类型,考虑到函数的用途,我真的无法正确。
这个函数应该做的是使用arg,对arg和一个T2对象做一些操作,并将操作的结果作为函数的返回值。显然,DoSomething() 的返回类型必须(兼容地)与为 arg 和 T2 对象完成的操作的返回类型匹配。
再次假设我们让DoSomething() 做一些真正的运算,比如乘法。然后我们将DoSomething() 写成如下代码:
template<typename T1, typename T2>
auto DoSomething(const T1& arg) -> /* trailing return-type */ {
T2 t2Obj; // Or have it obtained in some other way
return arg * t2Obj;
}
我应该如何为此形成尾随返回类型?
P.S.:我已经尝试使用 decltype(arg * T2)、decltype(T1 * T2) 和 decltype(T1::operator * (T2)) 以及其他一些看起来很奇怪的 decltypes 作为尾随返回类型。他们都没有工作。
【问题讨论】:
-
我错了,还是应该
-> decltype(arg * T2())工作?
标签: c++ c++11 trailing-return-type