В следующем коде, если я попытаюсь преобразовать массив шаблонов в std::string вместо того, чтобы компилятор использовал ожидаемый метод преобразования std::string, возникает проблема разрешения неоднозначности (поскольку он пытается вызвать методы преобразования массива) :
#include <iostream>
template<typename TemplateItem>
class TestA
{
public:
TemplateItem Array[10];
operator const TemplateItem *() const {return Array;}
operator const std::string() const;
};
template<>
TestA<char>::operator const std::string() const
{
std::string Temp("");
return Temp;
}
int main()
{
TestA<char> Test2;
std::string Temp("Empty");
Temp = Test2; //Ambiguity error. std::string or TemplateItem * ?
return 0;
}
Какую модификацию мне нужно внести в код, чтобы сделать так, чтобы код правильно и неявно разрешал функцию преобразования std::string? Особенно с учетом того, что const TemplateItem * будет рассматриваться как массив с нулевым завершением (что вряд ли будет).
operator std::string
возвращается по значению, это не обязательно должно бытьconst std::string
. Это избавит от проблемы? - person Mooing Duck   schedule 07.10.2011