小编Cfo*_*fon的帖子

C++ 11:lambda,currying

我有以下代码.你能解释一下它是如何工作的吗?

template<typename Function, typename... Arguments>
auto curry(Function func, Arguments... args) {
    return [=](auto... rest) {
        return func(args..., rest...);
    };
}

int main() {
    auto add = [](auto x, auto y) {
        return x + y;
    };
    auto add4 = curry(add, 4);
    std::cout << add4(3) << '\n'; //output: 7. (Ok)

}
Run Code Online (Sandbox Code Playgroud)

c++ lambda currying variadic-templates c++11

7
推荐指数
1
解决办法
2363
查看次数

C++ 11:函数模板:通过引用传递参数

有一种模板函数可以通过引用+回调函数传递一个参数,但如果通过引用回调函数传递参数然后编译器抛出错误就会出现问题:

没有匹配的呼叫功能func(int&, void (&)(int&)).

怎么了?

template<typename T> 
using func_t = void(T);

template<typename T>
void func(T& arg, func_t<T> callback) {
    callback(arg);
} 

void func1(int arg) {  }
void func2(int& arg) { } //<-- (1)

int main() {
    int x = 0;
    func(x, func1);
    func(x, func2); //<-- (2) compilation error 
}
Run Code Online (Sandbox Code Playgroud)

c++ templates c++11

4
推荐指数
1
解决办法
146
查看次数

C++ 11:模板编程

我有一些问题.下一个代码是什么意思?

template<typename> 
struct function_traits; // (1)

template<typename ClassType,
             typename ReturnType,
             typename... Arguments>
struct function_traits<ReturnType(ClassType::*)(Arguments...) const> { // (2)
        ...
};

template<typename T>
struct function_traits : public function_traits<decltype(&T::operator())> {}; 
// (3) Why here inheritance?
Run Code Online (Sandbox Code Playgroud)

谢谢!

c++ template-meta-programming c++11

3
推荐指数
1
解决办法
162
查看次数