c++操作符string和char*导致歧义错误



我试图使一个类转换操作符到字符串和char*,这使得在尝试创建字符串时产生歧义调用错误。假设我有以下类:

class A
{
public:
A(){};
operator const char*() const { return "a" };
operator const string() const { return "b" };
}

和以下主要程序:

int main()
{
A a;
string b = string(a);
return 0;
}

这导致对basic_string(A&)的模糊调用错误还尝试了以下操作:

class A
{
public:
A(){};
operator const char*() const { return "a" };
explicit operator const string() const { return "b" };
}
int main()
{
A a;
string b = static_cast<string>(a);
return 0;
}

导致相同的错误。我需要有两个操作符在我的代码,我怎么能能成功吗?

注意:使用字符串b = a工作,但我需要字符串(a)格式工作,以及

注释2:不使用显式键操作会使operator=有歧义

您需要使它们都是explicit并使用static_cast:

class A
{
public:
    A(){};
    explicit operator const char*() const { return "a"; };
    explicit operator const string() const { return "b"; };
};
int main()
{
    A a;
    string b = static_cast<string>(a); // works, b now has "b" as value
    const char * c = static_cast< const char *>(a); // works too, c now has "a" as value
    return 0;
}

最新更新