【发布时间】:2017-11-26 18:12:06
【问题描述】:
我有以下伪代码:
template <typename... Ts>
void f(int index) {
std::vector<std::function<void(void)>> funcs;
funcs.push_back([](){ std::cout << typeid(type_1).name() << std::endl; });
funcs.push_back([](){ std::cout << typeid(type_2).name() << std::endl; });
funcs.push_back([](){ std::cout << typeid(type_3).name() << std::endl; });
funcs.push_back([](){ std::cout << typeid(type_4).name() << std::endl; });
funcs[index]();
}
假设Ts... 参数包包含type_1、type_2、type_3 和type_4。
如何扩展参数包以实现这样的效果?我的意思是 - 如果模板包中有 4 个参数,并且在不同的 lambda 中也有不同的类型,我怎样才能获得 4 个 push_back() 调用?我不知道语法..
我真的可以在编译时得到某种这样的函数数组,所以在运行时没有 push_backs 吗?
C++17 解决方案还可以,但 C++14 最好。
【问题讨论】:
-
请澄清一下?
-
请说明您希望如何使用此功能。你会叫它几次吗?就一次?仅仅为了选择一个特定的索引而创建和填充一个向量似乎非常浪费。
-
是的,我必须同意我上面的人。这似乎是对 XY 问题的过度简化。
-
std::function<void>不是类型。 -
@Yakk 谢谢 - 修复它
标签: c++ c++11 c++14 variadic-templates c++17