#include <array>
#include <functional>
template<typename T, typename ... Args>
auto make_array(T&& t, Args&& ... args) -> std::array<T, sizeof...(Args)+1> {
return {std::forward<T>(t), std::forward<Args>(args)...};
}
int main() {
auto f = [](int i)->int { return i; };
auto f2 = [](int i)->int { return i*2; };
auto arr2 = make_array<std::function<int(int)>>(f, f2);
return 0;
}
有没有办法不在调用站点指定模板类型 make_array<std::function<int(int)>>
?
最佳答案
可以推导参数类型。与this clever solution通过 ecatmur您可以自动生成正确的 std::function<>
对象:
template<typename T, typename ... Args>
auto make_array(T&& t, Args&& ... args) ->
std::array<make_function_type<T>, sizeof...(Args)+1>
// ^^^^^^^^^^^^^^^^^^^^^
{
return {std::forward<T>(t), std::forward<Args>(args)...};
}
#include <iostream>
int main()
{
auto f = [](int i)->int { return i; };
auto f2 = [](int i)->int { return i*2; };
auto arr2 = make_array(f, f2);
std::cout << arr2[1](21); // Prints 42
return 0;
}
这是一个live example .
关于c++ - std::array 和 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15913557/