經過一些試驗和很多錯誤之後,我發現它對模板運算符不是很有用。作爲一個例子:關於C++模板和運算符
class TemplateClass
{
//Generalized template
template<TType>
TType& operator[](const std::string& key)
{
return TType;
}
//Specialized template for int
template<>
int& operator[]<int>(const std::string& key)
{
return 5;
}
//Specialized template for char
template<>
char& operator[]<char>(const std::string& key)
{
return 'a';
}
}
int main()
{
TemplateClass test;
//this will not match the generalized template.
test["test without template will fail"];
//this is not how you call an operator with template.
test<char>["test with template will fail"];
//this works!
test.operator[]<int>["test will work like this"];
return 0;
}
因此,爲了使與模板的操作是很醜陋的(除非您是入囉嗦了,真的是誰?)這就是爲什麼我一直在使用功能「」代替運營商。我的問題是爲什麼醜陋?爲什麼需要包含操作員關鍵字。我的猜測是,它與轉換運算符的一些後端魔術不使用括號來進行參數有關,是否有解決方法?提前致謝。
試驗和錯誤,哦,你可以保存的時間,你讀過一本書... – JoshD 2010-10-21 17:20:18
請注意,如果運算符采用模板參數類型的參數(如模板 int&operator [](const T&key )然後編譯器可以從你傳遞的參數中推導出模板參數 –
2010-10-21 17:21:56
我的問題是WTF?你爲什麼要嘗試這樣做?專業化是應該避免的(如果可以的話)和模板化操作符應該只用於編譯器可以通過模板參數推導規則計算出模板參數,對於C++模板相關書籍,我可以推薦「C++模板 - 完整指南」 – sellibitze 2010-10-21 17:23:56