std::array and lambda
std::array and lambda
#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)>>
的模板类型?
可以推导参数类型。使用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;
}
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 可组合的lambda/std::函数与std::可选
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 如何将lambda作为模板类的成员函数参数
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 在 lambda 捕获中声明的变量的类型推导
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 模板函数指针和lambda
- 两组使用lambda函数的大括号
- C++: Template and Lambda
- std::max with lambda and auto
- Qt Slots and C++11 lambda
- EnumChildWindows and lambda
- 使用for_each()AND lambda函数打印C样式数组的Template函数
- std::array and lambda