【问题标题】:How can I access the types of a lambda in c++0x?如何在 c++0x 中访问 lambda 的类型?
【发布时间】:2010-11-05 15:57:13
【问题描述】:

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

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

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

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

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"); });

【问题讨论】:

  • 我会要求更广泛的观点:您试图使用exec 函数解决什么问题?听起来有点丑。
  • 我正在尝试创建代数联合类型。
  • 任意函数对象类型的重载分辨率...我想不出办法做到这一点。如果他们会导出他们的参数类型,那是可以做到的。否则,我不知道。
  • 感谢您的回复。

标签: templates lambda c++11 variadic


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2010-12-29
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2011-01-08
    相关资源
    最近更新 更多