C++ 运算符^重载类型为‘;无效’;和‘&书信电报;未解析的重载函数类型>’;错误
我在下面的代码中遇到了这个错误。我不知道怎样才能解决这个问题。我尝试了多种方法,比如使函数无效、自动或lambda函数释放函数。我试了所有的C++ 运算符^重载类型为‘;无效’;和‘&书信电报;未解析的重载函数类型>’;错误,c++,operator-overloading,C++,Operator Overloading,我在下面的代码中遇到了这个错误。我不知道怎样才能解决这个问题。我尝试了多种方法,比如使函数无效、自动或lambda函数释放函数。我试了所有的 invalid operands of types ‘void’ and ‘<unresolved overloaded function type>’ to binary ‘operator|’ 145 | student & func | OUTPUT; | ~~~~~~~~~~~~~~~^~~~~~~ 会更
invalid operands of types ‘void’ and ‘<unresolved overloaded function type>’ to binary ‘operator|’
145 | student & func | OUTPUT;
| ~~~~~~~~~~~~~~~^~~~~~~
会更有意义
请注意,传递
OUTPUT
不会按您期望的方式工作。操作员^
需要一个函数,而输出
是一个函数模板。您需要使用functor或接受模板作为模板参数。运算符不会返回任何内容。这有点奇怪。你不能使用void
作为函数的参数,因此你的操作符(返回void
)是不可链接的。在没有
或(
调用参数)
的情况下使用模板函数的名称是很棘手的,而且只允许在一些非常特殊的情况下使用。要获得所需的语法,可能输出
应该是具有成员函数模板操作符()
的类类型对象的名称。
emplate<typename Container, typename FuncObj>
auto take( Container cont, FuncObj fobj){
Container result;
for(const auto& item: cont){
if(fobj(item)){
result.push_back(item);
}
}
return result;
}
template<typename T>
auto OUTPUT (T t){
print(t);
}
template<typename Container ,typename FuncObj>
auto operator &(const Container& variable, const FuncObj& fobj){
take(variable, fobj);
}
template<typename Container,typename FuncObj>
auto operator ^(const Container& container, const FuncObj& fobj){
for(auto item: container){
fobj(item);
}
}
student & func ^ OUTPUT;
template<typename Container ,typename FuncObj>
auto operator &(const Container& variable, const FuncObj& fobj){
take(variable, fobj);
}
template<typename Container ,typename FuncObj>
auto operator &(const Container& variable, const FuncObj& fobj){
return take(variable, fobj);
}