Я пытаюсь написать класс со своими собственными операторами литых, но у меня возникли проблемы с кратному operator=
ами«оператор =» неоднозначен для станд :: строка
мне удалось воспроизвести проблему с небольшим кодом ниже
#include <string>
class X
{
public:
operator const char*() const {
return "a";
}
operator std::string() {
return "c";
}
};
void func()
{
X x;
std::string s = "";
s = x;
}
Я понимаю, что std::basic_string
имеет несколько оператор присваивания и поэтому компилятор запутается.
Если я удаляю любые операторы приведения, это работает, но мне было интересно, есть ли способ удерживать обоих операторов.
Мой класс будет возвращать разные значения в зависимости от состава.
Я мог бы также использовать static_cast<std::string>(x)
, чтобы заставить актерский состав, но мне было интересно, есть ли способ сделать это без статического литья?
Как насчет 's = std :: string (x)'? –
Да, актер будет работать (как упоминалось в моем сообщении), но мой вопрос больше, если я мог бы намекнуть компилятору, что использовать, чтобы мне не нужно было использовать листинг. –
Разве это не отличная «подсказка для компилятора»? –