c ++ string do operador e char * causando erro ambíguo

9

Estou tentando transformar uma classe com operadores de conversão em string e char *. Isso cria um erro de chamada ambíguo ao tentar criar uma string. suponho que eu tenho a seguinte classe:

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

e os seguintes programas principais:

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

isso causando um erro de chamada ambíguo para basic_string (A & amp;) também tentei o seguinte:

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;
}

isso está causando o mesmo erro. Eu preciso ter ambos os operadores no meu código, como posso fazer isso funcionar?

nota: usar string b = a funciona, mas eu preciso do formato de string (a) para funcionar também

nota 2: não usar keywork explícito torna operador = ambíguo

    
por sagibu 16.11.2016 в 10:57
fonte

1 resposta

2

Você precisa torná-los explicit e usar 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;
}
    
por SingerOfTheFall 16.11.2016 / 11:06
fonte