gpt4 book ai didi

c++ - 为什么这些方法调用不明确?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:58 26 4
gpt4 key购买 nike

#include <string>
using String = std::string;

class Base {
protected:
String value;
};

class Readonly : virtual Base {
public:
const String& method() const {
return value;
}
String& method() {
return value;
}
};

class Writeonly : virtual Base {
public:
Writeonly& method(const String& value) {
this->value = value;
return *this;
}
Writeonly& method(String&& value) {
this->value = std::move(value);
return *this;
}
};

class Unrestricted : public Readonly, public Writeonly {};

void usage() {
String string;
Unrestricted unrestricted;
unrestricted.method(string); // ambiguous
string = unrestricted.method(); // ambiguous
}

谁能向我解释为什么这些方法调用不明确?

无论是“Writeonly”还是“Readonly”,它们放在一起时都不会产生歧义。

我想将它用于基于模板的访问器属性。因此,我希望能够使用“Writeonly”、“Readonly”和“Unrestricted”的实例。

最佳答案

因为编译器在两个不同的范围内找到了这个名字。

诀窍是将两个名称都置于Unrestricted 的范围内:

class Unrestricted : public Readonly, public Writeonly {
public:
using Readonly::method;
using Writeonly::method;
};

关于c++ - 为什么这些方法调用不明确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38325885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com