C 专用模板功能接收文字字符串

C++ specialized template function receiving literal string

本文关键字:文字 字符串 功能 专用      更新时间:2023-10-16

我正在编写具有许多专业的模板方法。

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*

Update

在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]) {}