如何在c ++ 0x中访问lambda的类型?

axi*_*mar 5 lambda templates variadic c++11

如何在c ++中访问lambda函数的参数类型?以下不起作用:

template <class T> struct capture_lambda {
};

template <class R, class T> struct capture_lambda<R(T)> {
    static void exec() {
    }
};

template <class T> void test(T t) {
    capture_lambda<T>::exec();
}

int main() {
    test([](int i)->int{ return 0; });
}
Run Code Online (Sandbox Code Playgroud)

上面没有编译,因为编译器选择模板原型而不是专门化.

有没有办法做到这一点?

我实际上想要实现的是:我有一个函数列表,我想选择适当的函数来调用.例:

template <class T, class ...F> void exec(T t, F... f...) {
    //select the appropriate function from 'F' to invoke, based on match with T.
}
Run Code Online (Sandbox Code Playgroud)

例如,我想调用带'int'的函数:

exec(1, [](char c){ printf("Error"); }, [](int i){ printf("Ok"); });
Run Code Online (Sandbox Code Playgroud)

Mot*_*tti 2

这是不可能的,lambda 函数是用于创建函数对象而不是实际函数的语法糖。这意味着模板接受一个类,而类没有参数类型的概念。

另请记住,通用函数对象可以具有任意数量的重载operator()