Bu konuda SO ile ilgili başka soruları gördüm, ancak hiçbiri tam olarak açıklamıyor. sağ derleyicilerin aşağıdaki iki durumu ele alma yolları nedir?dönüşüm operatörü aşırı yükleme belirsizliği, derleyiciler farklılıklar
Örnek 1:
struct BB
{
// generic cast
template<typename T>
operator T() const
{
return 0;
}
// string cast
operator std::string() const
{
return string("hello");
}
};
int main()
{
BB b;
string s = b;
}
Çıkış:
Bir tümü üzerinde farklı sonuçlar elde (-std = C++ 0 x) ile gcc 4.7.1, VS2010 ve VS2012 ile çalıştık- gcc 4.7.1: Tamam
- VS2010: Tamam
- VS2012: Başarısız: " dizeye BB 'den dönüştürülemez"
Örnek 2:
struct BB
{
// generic cast
template<typename T>
operator T() const
{
return 0;
}
// string cast
operator std::string() const
{
return string("hello");
}
};
int main()
{
BB b;
string s = (string)b;
Çıkış:
- gcc 4.7.1: Yerine: aşırı dize çağrısı (bb &) kuşkulu
- VS2010 olup: Tamam
- VS2012: Başarısız: "BB'den string'e dönüştürülemiyor"
Genel dönüştürme kullanıyorum, çünkü bir şeyleri destekliyor gibi yapıyorum :: any, ama belki de daha iyi bir yol var. Bu cevabı mksvetkov olarak işaretleyecektir mksvetkov oldukça benzer – Rolle