C ++专用模板函数接收文字字符串

时间:2018-02-27 20:29:31

标签: c++ templates template-specialization string-literals

我正在编写一个有很多专业化的模板方法。

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

1 个答案:

答案 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]> {};