相关疑难解决方法(0)

在C++ 0x中专门研究lambda上的模板

我编写了一个traits类,它允许我在C++ 0x中提取有关函数或函数对象的参数和类型的信息(使用gcc 4.5.0测试).一般情况处理函数对象:

template <typename F>
struct function_traits {
    template <typename R, typename... A>
    struct _internal { };

    template <typename R, typename... A>
    struct _internal<R (F::*)(A...)> {
        // ...
    };

    typedef typename _internal<decltype(&F::operator())>::<<nested types go here>>;
};
Run Code Online (Sandbox Code Playgroud)

然后我对全局范围内的普通函数进行了专门化:

template <typename R, typename... A>
struct function_traits<R (*)(A...)> {
    // ...
};
Run Code Online (Sandbox Code Playgroud)

这工作正常,我可以将一个函数传递给模板或函数对象,它可以正常工作:

template <typename F>
void foo(F f) {
    typename function_traits<F>::whatever ...;
}

int f(int x) { ... }
foo(f);
Run Code Online (Sandbox Code Playgroud)

如果foo我不想传递一个函数或函数对象,而是想传递一个lambda表达式,该怎么办?

foo([](int x) { ... });
Run Code Online (Sandbox Code Playgroud)

这里的问题是既不function_traits<>适用专业化.C++ …

c++ lambda templates specialization c++11

25
推荐指数
2
解决办法
7811
查看次数

标签 统计

c++ ×1

c++11 ×1

lambda ×1

specialization ×1

templates ×1