我正在编写一个有很多专业化的模板方法。
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*
专业化。非常感谢 Rakete1111
答案 0 :(得分:4)
如果您要求上课,我会回答您可以使用部分专业化:
tab start
tab end
loading 16
loading 18
loading 20
undefined 16
undefined 18
undefined 20
undefined 16
undefined 18
undefined 20
complete 16
complete 18
complete 20
但这对功能模板不起作用。相反,你可以重载它们:
template<std::size_t N>
struct Foo<const char (&)[N]> {};