在C++中发出调度一个过载的运算符到基的问题



如果我从根本上误解了C++中的调度,请原谅我!

粘贴在下面的代码可以正常工作。

但是,如果我取消注释/添加附加运算符<lt;方法(应该处理不同的agrument类型(时,C++就无法解析以前工作的分派"*这<lt;某事";(在没有这种方法的情况下,已按计划成功地派往基地(。

上面写着:

main.cpp:25:15: Invalid operands to binary expression ('Derived' and 'Something')

有人能向我解释一下为什么会发生这种事吗?

提前感谢

(Mac操作系统蒙特利12.2.1,xCode 13.2.1(

#include <iostream>
class Something { };
class SomethingUnrelated { };
class Base {
public:
virtual void method() = 0;
void operator<<(Something something) {
method();
}
};
class Derived : public Base {
public:
void method() { std::cout << "Derived::method() - Yay!" << std::endl; }
void work(Something something) {
*this << something;
}
// void operator<<(SomethingUnrelated somethingUnrelated) { }
};
int main(int argc, const char * argv[]) {
Something something;
Derived derived;
derived.work(something);
return 0;
}

在为非限定名称查找构建查找集时,父类中的名称被隐藏。您可以将父级的运算符带到using指令设置的子级查找中。我找不到重复的问题,但我确信重复的问题存在。

class Derived : public Base {
public:
void method() { std::cout << "Derived::method() - Yay!" << std::endl; }
void work(Something something) {
*this << something;
}
using Base::operator<<;
void operator<<(SomethingUnrelated somethingUnrelated) { }
};

最新更新