假设我有这个函数模板:
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;
}
然后我应该如何为此形成尾随返回类型?
PS:我已经尝试使用decltype(arg * T2)
,decltype(T1 * T2)
和decltype(T1::operator * (T2))
其他一些看起来很奇怪decltype
的尾随返回类型。他们都没有工作。