定义模板结构的特征时出现不完整的类型错误

时间:2018-07-31 02:54:46

标签: c++ templates

我有一个可以找到输入类型名称特征的结构:

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 ( & )[ ] >

为什么不推断使用其中一种专用模板?

1 个答案:

答案 0 :(得分:2)

问题在于字符串文字的类型不是“指向第一个字符的指针”,而是“ N个常量字符的数组”。这应该可以解决问题:

template <std::size_t N>
struct cstr_traits<const char (&)[N]>
{
    using cstr_trait = char;
};

此外,出于完整性考虑,您可能不想忘记char16_tchar32_t,无论您打算做什么。