【发布时间】:2019-09-21 20:43:10
【问题描述】:
我目前正在尝试在 C++ 中模拟管道,您可以在其中通过管道将某些内容作为参数提供给 lambda 函数。
但是当我在操作符上创建全局重载 |在向量和函数指针之间,我无法重新定义运算符,因为(我假设)你不能重载两个原始类型。
这是我一直在尝试的:
#include <iostream>
using namespace std;
void operator |( int *vet , void(*func)(int)){
for ( int i = 0 ; i < 10 < i++){
func(vet[i]);
}
int main(int argc, char **argv)
{
int tab[10] = { 1, 2, 3, 2, 3, 4, 6, 0, 1, 8 };
tab | []( int x ) { cout << x*x << endl; };
return 0;
}
我得到的错误是“错误:'void operator|(int*, void (*)(int))' must have an argument of class or enumerated type”
那么,我将如何重载 |数组和 lambda 函数之间的运算符?
提前致谢。
【问题讨论】:
-
考虑到
|运算符必须返回一个值,您的重载毫无意义。您无法真正改变运算符的基本方面。 -
另外,你想要的已经通过
std::for_each函数实现了(或者使用range-basedforloop)。