我的问题的精简版:
我想合并这两个功能:
void Bar(const std::string &s);
void Bar(const std::wstring &s);
..整合到一个模板化函数中:
template <class CharType>
void Foo(const std::basic_string<CharType> &s);
而且我认为我将能够Foo
像(1)
and一样调用(2)
,但令我惊讶的是,它甚至不起作用(3)
。
(1) Foo("my string");
(2) Foo(std::string("my string"));
(3) Foo(std::basic_string<char>("my string"));
我尝试删除const
参数的限定符s
,甚至删除引用 ( ),或者使用而不是&
调用,但结果都相同。lvalues
rvalues
编译器(gcc 和 VS - 所以我很确定这是符合标准的行为)无法推断Foo
. 当然,如果我打电话给Foo
like ,它会起作用Foo<char>(...)
。
所以我想了解为什么会这样,特别是因为调用(3)
是调用参数对象的类型和函数参数类型之间的一对一类型。
其次,我想要一个解决方法:能够使用一个模板函数,并且能够像(1)
and一样调用它(2)
。
编辑
(2)
并(3)
做工作。我在我的编译器中声明它是错误的(不像我的问题):
template <class CharType>
void Foo(const std::basic_string<char> &s);
对于那个很抱歉。