std::array and lambda

std::array and lambda

本文关键字:lambda and array std      更新时间:2023-10-16
#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;
}