我的课程N
采用一种类型T
和不同数量的类型F...
真正发生的是我正在重载operator()
以获取函数引用以及该函数将提供的参数。这就像一个绑定函数。但是当函数引用返回时void
,我不希望能够std::cout
从该函数调用的值operator()
。因此,当函数引用的返回类型为时,我添加了operator<<
for的重载以不做任何事情,但我想我没有正确写出函数签名,因为我得到了错误。std::cout
void
#include <iostream>
#include <utility>
template <typename T>
struct N;
template <typename T, typename ... F>
struct N<T(F...)> {
T operator()(T (&t)(F...), F &&... f) {
return t(std::forward<F>(f)...);
}
};
template <typename ... T>
void operator<< (std::ostream &, const N<void(T...)> &) {}
// don't do anything when void
void f(int, int) {}
int main() {
N<void(int, int)> bind;
std::cout << bind(f, 5, 4); // errors
}
我得到的错误很长,所以我不会发布它们;它们是在返回的函数上打印的典型错误消息void
。
上面的代码失败了,因为我正在打印一个返回的函数void
;这就是功能f
。我的过载operator<<
似乎没有影响任何事情。我在这里做错了什么?如果您需要更多详细信息,请直说。谢谢。