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

标签 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* 特化

最佳答案

如果你问这个是为了上课,我会回答你可以使用部分特化:

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/

相关文章:

c++ - 有没有办法从 GUID 中找到时间戳(创建时间)?

c++ - 计算斐波那契数的模板元编程

php - 即使未注册,也可以在 WooCommerceThankyou 页面上显示客户详细信息

c++ - C++-17 中专门化的模式匹配中 lambda 的拆分函数签名

c++ - 我可以像这里一样有专门的模板吗?

c++ - OpenGL 应用程序在其他计算机上崩溃

c++ - 运行时检查失败 #2 - 变量 'ex' 周围的堆栈已损坏

c++ - 使用 boost::filesystem 时如何正确处理错误?

c++ - 引用模板c++

c++ - 调用模板和特化来交叉验证结果?