2016-11-16 44 views
9

我想使用转换运算符类来字符串和char *,这使尝试创建字符串时出现模糊的调用错误。 假设我有以下类:C++运算符字符串和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的作品,但我需要的字符串()格式的工作藏汉

注2:不使用显式keywork使得运营商=暧昧

+2

@Sergey我不能在那里发现一个局部变量? –

+0

[相关](https://stackoverflow.com/questions/3518145/c-overloading-conversion-operator-for-custom-type-to-stdstring)。 –

+0

@πάνταῥεῖ嗯,是的,它应该被编译到数据段。 – Sergey

回答

2

你需要让他们俩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; 
}