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

Incomplete Type Error when defining traits of templated structure

本文关键字:错误 类型 结构 特征 定义      更新时间:2023-10-16

我有一个结构,它可以找到输入的typename的特征:

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

为什么没有推导出使用一个专门的模板?

问题是字符串文字的类型不是"指向第一个字符的指针",而是"N个常量字符的数组"。这应该会奏效:

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

此外,为了完整性,您可能不想忘记char16_tchar32_t,无论您想做什么…