混合模板类和模板方法时的错误

C++ Error when mixing template class and template method

本文关键字:错误 模板方法 混合      更新时间:2023-10-16

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

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()
{
    // ...
}

给出相同的错误。

还有别的吗?

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

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

你差点就成功了。您必须像声明中那样堆叠template:首先是类,然后是成员。

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

请注意,可以通过在类体中定义函数来简化代码,但我理解有些人出于美观的原因更喜欢将声明与定义分开。