Ale*_*oks 1 c++ templates c++11
我有一个类似于以下内容的包装函数:
template<typename Func, typename ... Args>
void func(Func f, Args ... args) {
...
f(args...);
...
}
Run Code Online (Sandbox Code Playgroud)
Func是否可以在编译时从类型中提取返回类型?
例如,用户拥有代码并按func以下方式调用:
template<typename T>
T add(const T& l, const T& r) {
return l + r;
}
int main(int argc, char** argv) {
double a = 4.5, b = 5.5;
func(add<double>, a, b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我们可以在调用中推断出func一个函数被传递给它并返回一个 吗double?我想将返回类型信息用于内部的其他内容func。
以下任一操作都应该有效
using result_type = decltype(std::declval<Func>()(std::declval<Args>()...));
Run Code Online (Sandbox Code Playgroud)
或者
using result_type = typename std::result_of<Func(Args...)>::type;
Run Code Online (Sandbox Code Playgroud)