我有一个可以找到输入类型名称特征的结构:
template< typename > struct cstr_traits;
template< > struct cstr_traits< const char* >
{
typedef char cstr_trait;
};
template< > struct cstr_traits< const wchar_t* >
{
typedef wchar_t cstr_trait;
};
使用时,我得到Type 'cstr_traits<char const(&)[4]> is incomplete'
。这是用法:
cstr_traits< decltype( "Foo" ) >::cstr_trait
有什么想法吗?我已经尝试过了:
template< > struct cstr_traits< const const ( & )[ ] >
为什么不推断使用其中一种专用模板?
答案 0 :(得分:2)
问题在于字符串文字的类型不是“指向第一个字符的指针”,而是“ N个常量字符的数组”。这应该可以解决问题:
template <std::size_t N>
struct cstr_traits<const char (&)[N]>
{
using cstr_trait = char;
};
此外,出于完整性考虑,您可能不想忘记char16_t
和char32_t
,无论您打算做什么。