【发布时间】:2018-09-08 03:16:45
【问题描述】:
我是模板元编程的新手。第二个参数将与传递的函数参数相同。我想从Func推导出第二个参数类型。
template<typename Func>
void execute(Func func, decltype(Func) t)
{
std::cout << func(t) << std::endl;
}
int main()
{
std::function<int(float)> func1 = [](float f) { return int(f); };
execute(func1,1.5);
return 0;
}
这可行,但我不想声明额外的typenameme T,因为信息已经在Func 中可用,所以为什么不推断。
template<typename Func, typename T>
void execute(Func func, T t)
{
std::cout << func(t) << std::endl;
}
【问题讨论】:
-
看看可变参数模板cplusplus.com/articles/EhvU7k9E
-
你想只接受 std::function 还是任何可调用对象?你想接受一个只有一个参数的函数吗?
-
@Eugene: execute 应该接受一个 std::function 和第二个参数作为参数
-
你为什么不想要额外的模板参数?
-
@Eugene:类型信息已经存在于 Func 本身中,我想从 Func 中减少。
标签: c++ c++11 templates lambda c++17