C 专用模板功能接收文字字符串
C++ specialized template function receiving literal string
我正在编写具有许多专业的模板方法。
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]) {}
相关文章:
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 如何使用字符串文字作为宏参数
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 构造<int>具有 2 个字符串文字的向量
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 方便地对C++中的所有字符串文字进行模糊处理
- 比较 std::string 和 C 样式字符串文字
- 如何从char16_t字符串文字中读取双精度?
- 如何在 C 宏中将变量字符串与文字字符串连接起来?
- 我如何知道 boost::any 是否包含文字字符串
- C 专用模板功能接收文字字符串
- 如何使变量成为文字字符串
- 可以一个#define一个文字字符串,其中包含用于资源文件的非ANSI字符的字符串
- 从文字字符串生成编译时常量整数
- 当一个函数可以被赋予一个 char* 或文字字符串时,声明这个函数的正确方法是什么?
- 如何在 C 或C++宏中使用函数作为文字字符串
- GCC中可能的错误:结构中的文字字符串类型
- 文字字符串有效,但字符串在 file.open() 中不起作用
- C/C++:文字字符串中"xNNN"格式的固有歧义
- constexpr函数中声明为静态的文字字符串