我的问题的条纹下来的版本:无法推断出模板参数与标准:: 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
编辑我的答案,现在可能适合您的需求 –