Я использую прокси-тип, чтобы отложить работу, пока результат не будет присвоен переменной, он работает с использованием операторов преобразования для прокси-типа.При добавлении перегрузки оператора преобразования для std::string
он работает для построения строки из прокси-сервера, но не компилируется для назначения со следующим сообщением об ошибке:
error: неоднозначная перегрузка для оператора =
Хотя этот вопрос похож на вопрос об операторе оператора T (), который не используется в присваивании , решение здесь не применимо, поскольку я также использую оператор преобразования с шаблонами.
Ниже приведен фрагмент:
#include <iostream>
#include <string>
struct Proxy
{
template < typename T >
operator T ()
{
T res;
std::cerr << "Converting to T: " << typeid( T ).name() << "\n";
return res;
}
operator std::string ()
{
std::string res;
std::cerr << "Converting to string\n";
return res;
}
};
int main()
{
struct Foo {};
Proxy proxy;
bool b = proxy; // Construct, works
b = proxy; // Assignment, works
Foo f = proxy; // Construct, works
f = proxy; // Assignment, works
std::string s = proxy; // Construct, works
s = proxy; // Assignment, this line fails to compile <<<<<
return 0;
};
Как этот прокси можно настроить для работы со строковым присваиванием?