混合模板 class 和模板方法时出现 C++ 错误

C++ Error when mixing template class and template method

我有一个 class 将大小类型作为参数,以防万一不想使用 size_t 或其他需要强制转换和检查溢出的硬编码类型。 class 也有一些采用第二种模板类型的方法:

template< typename SizeType = uint32_t >
class BufferReader
{
    SizeType m_nPosition;

    template< typename T >
    T Read();
}

我的问题是,实现它的语法是什么?

template< typename SizeType, typename T >
T BufferReader< SizeType >::Read()
{
    // ...
}

这给我一个错误:

invalid use of incomplete type 'class core::BufferReader<SizeType>'

或:

template< typename T >
template< typename SizeType >
T BufferReader< SizeType >::Read()
{
    // ...
}

同样的错误。

或其他什么?

谢谢!

你的第二个例子几乎是正确的,你只需要先有 class 的模板参数,然后再有函数的模板参数:

template< typename SizeType >
template< typename T >
T BufferReader< SizeType >::Read()
{
    // ...
}

你差不多明白了。您必须像声明中那样堆叠 template:首先是 class,然后是成员。

template < typename SizeT >
template < typename T >
T
BufferReader<SizeT>::Read()
{
  return T {};
}

请注意,可以通过在 class 正文中定义函数来简化代码,但我知道出于审美原因,有些人更喜欢将声明与定义分开。