Със следния код, ако се опитам да преобразувам шаблонен масив в 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