比方说,我有一个模板函数返回一个依赖类型。喜欢的东西:typedefing函数返回类型
template <class T>
typename std::result_of<T()>::type
foo()
{
std::result_of<T()>::type retVal;
// Some mind blowing code...
return retVal;
}
正如你所看到的,我声明的返回值的局部变量时,曾在函数类型写的返回类型两次,一次,另一次。
有没有一种方法我可以typedef
这种类型的函数签名,所以类型将只声明一次(无代码复制),并且只在函数(签名和正文)内可见和可用? 喜欢的东西(警告伪代码未来,请不要生气或启发!):
template <class T>
typedef typename std::result_of<T()>::type FooReturnType
FooReturnType foo()
{
FooReturnType retVal;
// Some mind blowing code...
return retVal;
}
编辑:我是仅限于C++编译器11。
感谢
尝试将其作为默认模板参数 – user3514538
或者如果您的编译器支持C++ 14,可能是自动返回类型? – oLen
@ user3514538想过它......但是然后调用者将能够覆盖此值。我需要'static_assert',第二个参数确实是我想要的(仍然需要写两次返回类型...):( –