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

时间:2015-10-15 13:32:41

标签: c++ class templates header

我有一个类,它将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()
{
    // ...
}

出现同样的错误。

还是其他什么?

谢谢!

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

你几乎得到了它。您必须在声明中堆叠template s:首先是类,然后是成员。

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

请注意,可以通过在类体中定义函数来简化代码,但我理解为了美学原因,有些人更愿意将声明与定义分开。