在VC2012中有一个奇怪的问题,我似乎无法理解将常量指针通过常量引用传递到模板类函数中,而该模板参数为非常量指针的语法:
template<typename T>
struct Foo
{
void Add( const T& Bar ) { printf(Bar); }
};
void main()
{
Foo<char*> foo;
const char* name = "FooBar";
foo.Add(name); // Causes error
}
我在这里简化了我的问题,但基本上我想让“Add”参数具有const T,即const char *。 我尝试过:
void Add( const (const T)& Bar );
typedef const T ConstT;
void Add( const (ConstT)& Bar );
void Add( const typename std::add_const<T>::type& Bar );
这些方法都不起作用。我得到的确切错误信息是:
error C2664: 'Foo<T>::Add' : cannot convert parameter 1 from 'const char *' to 'char *const &'
with
[
T=char *
]
Conversion loses qualifiers
我可以看到这是正确的,但我如何在不将“name”强制转换为非const的情况下解决它。