假设我有这个功能模板:
template<typename T1, typename T2>
auto DoSomething(const T1& arg);
Run Code Online (Sandbox Code Playgroud)
当然这个函数需要一个尾随返回类型,考虑到函数的目的,我真的不能正确.
这个函数应该做的是使用和对象arg做一些操作,并使用该操作的结果作为函数的返回值.显然,返回类型必须(兼容)与为对象和对象完成的操作的返回类型匹配.argT2DoSomething()argT2
再次假设我们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;
}
Run Code Online (Sandbox Code Playgroud)
那么我应该如何为此形成尾随返回类型?
PS:我已尝试使用decltype(arg * T2),decltype(T1 * T2)以及decltype(T1::operator * (T2))其他一些看起来很奇怪decltype的尾随返回类型.他们都没有工作.