具有相同名稱的調用函數我試圖定義一個在類型上有一些操作的模板類。 應該實現方法ToString以在Tools類模板實例化的任何類型的名稱空間中調用ToString。與方法
namespace X
{
class SomeType
{
};
std::wstring ToString(SomeType)
{
// ...
}
}
template<class T>
class Tools
{
static auto ToString(T& t)
{
return ToString(t);
}
}
我在ToString的工具實現中遇到錯誤。編譯器試圖再次遞歸地調用方法ToString,而不是調用命名空間X中的ToString。
我不能使用X :: ToString,因爲當我嘗試使用來自命名空間Y的類型實例化Tools類時,將無法使用例如,如果我使用:
namespace Y
{
class SomeOtherType
{
};
std::wstring ToString(SomeOtherType)
{
// ...
}
}
Y::SomeOtherType someOtherType;
auto s = Tools<Y::SomeOtherType>::ToString(someOtherType); // Would fail as SomeOtherType isn't in namespace X.
是否有可能使這項工作?
我正在使用VS 2015更新3.爲此工作的解決方案是首選。
相關:calling a global function with a class method with the same declaration
我不明白爲什麼'X :: ToString()'不起作用,你能提供一個你的意思嗎? – Galik
@Galik:他意味着他想要'namespaceof(T):: ToString()'。即它也可以是'Y :: ToString()'或'Z :: ToString()'或別的東西。所以只要寫'X :: ToString()'是不對的。 –
如果我理解正確(不確定),似乎你希望'X :: ToString();'能夠用不同的參數類型('X :: SomeType'&'Y :: SomeType')來調用。爲此,您需要將其設置爲模板功能。 – Galik