我的問題的條紋下來的版本:無法推斷出模板參數與標準:: basic_string的
我要合併這兩個功能:
void Bar(const std::string &s);
void Bar(const std::wstring &s);
..into一個模板函數:
template <class CharType>
void Foo(const std::basic_string<CharType> &s);
而且我認爲我將能夠調用Foo
像(1)
和(2)
,但甚至沒有(3)
讓我吃驚作品。
(1) Foo("my string");
(2) Foo(std::string("my string"));
(3) Foo(std::basic_string<char>("my string"));
我試圖爲參數s
除去const
限定符和甚至滴加參考(&
),或與lvalues
代替rvalues
調用,但都具有相同的結果。
編譯器(包括gcc和VS--所以我敢肯定它是標準兼容行爲)不能推導出Foo
的模板參數。當然,如果我撥打Foo
(如Foo<char>(...)
),它就可以工作。
所以我想明白這是爲什麼,尤其是因爲調用(3)
是調用參數對象類型和函數參數類型之間的一對一類型。
其次,我想要一個解決方法:能夠使用一個模板化功能,並能夠稱爲它像(1)
和(2)
。
編輯
(2)
和(3)
做的工作。我在我的編譯器中聲明它是錯誤的(不像我的問題):
template <class CharType>
void Foo(const std::basic_string<char> &s);
對不起。
據我可以看到在VS的實現'std :: string'不是真的'basic_string'是'basic_string ,'分配器>'所以我認爲它不工作,因爲它缺少一些模板參數。 –
Raxvan
編輯我的答案,現在可能適合您的需求 –