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

发布于 2024-09-30 18:46:32 字数 760 浏览 4 评论 0原文

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

How is it possible to access the types of the parameters of a lambda function in c++? The following does not work:

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

The above does not compile, because the compiler chooses the template prototype instead of the specialization.

Is there a way to do the above?

What I am actually trying to achieve is this: I have a list of functions and I want to select the appropriate function to invoke. Example:

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

For example, I want to invoke the function that takes 'int':

exec(1, [](char c){ printf("Error"); }, [](int i){ printf("Ok"); });

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

微暖i 2024-10-07 18:46:32

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

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

This isn't possible, lambda functions are syntactic sugar for creating function objects not actual functions. This means that the template is accepting a class, and classes don't have the concept of argument type.

Also keep in mind that a general function object can have any number of overloaded operator()s.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文