我正在编写一个具有许多特化的模板方法。
class FieldValue
{
public:
...
template< typename T >
void Set( const T& value );
...
};
其中之一是:
template <>
void FieldValue::Set< const char* >( const char* const& value )
{
...
}
但是当我尝试调用
FieldValue fieldValue;
fieldValue.Set( "literal string" );
它期望 const char[14]
的特化,它是 "literal string"
的长度,而不是 const char*
是否有解决此问题而不需要将其转换为 const char*
的方法?
更新
在Rakete1111的推荐下,我就是这样做的:
class FieldValue
{
public:
...
template< typename T >
void Set( const T& value );
template< std::size_t N >
void Set( const char( &value )[ N ] )
{
Set( static_cast< const char* >( value ) );
}
...
};
这将最终调用 const char*
特化
最佳答案
如果你问这个是为了上课,我会回答你可以使用部分特化:
template<std::size_t N>
struct Foo<const char (&)[N]> {};
但这不适用于函数模板。相反,您可以重载它们:
template<std::size_t N>
void FieldValue::Set(const char (&Value)[N]) {}
关于C++ 专用模板函数接收文字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49017404/