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

标签 templates lambda c++11 variadic

如何在 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; });
}

上面没有编译,因为编译器选择的是模板原型(prototype)而不是特化。

有没有办法做到以上几点?

我实际上想要实现的是:我有一个函数列表,我想选择适当的函数来调用。例子:
template <class T, class ...F> void exec(T t, F... f...) {
    //select the appropriate function from 'F' to invoke, based on match with T.
}

例如,我想调用采用'int'的函数:
exec(1, [](char c){ printf("Error"); }, [](int i){ printf("Ok"); });

最佳答案

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

还要记住,通用函数对象可以有任意数量的重载 operator() s。

关于templates - 如何在 c++0x 中访问 lambda 的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4107636/

相关文章:

php - 从 newegg 获取商品价格

python - 如果 django 模板有一个渲染错误会在生产中无声地失败,如何使测试用例失败

python - 在python列表中将数字转换为成绩

java - 使用 Java lambda 的外部可配置过滤

c++ - C++ 筛选代码中的不可见内存错误

C++11 检查成员的 COM 智能指针

c++ - 根据模板参数选择成员类型?

c# - 将条件 lambda 语句与列表上的 foreach 操作一起使用

c++ - 使用 STL 按成员(member)订购容器

c++ - 带有模板参数的函数指针