我有以下代码.你能解释一下它是如何工作的吗?
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) 有一种模板函数可以通过引用+回调函数传递一个参数,但如果通过引用回调函数传递参数然后编译器抛出错误就会出现问题:
没有匹配的呼叫功能
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) 我有一些问题.下一个代码是什么意思?
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)
谢谢!