【问题标题】:C++ Error when mixing template class and template method混合模板类和模板方法时出现 C++ 错误
【发布时间】:2016-01-13 23:55:16
【问题描述】:

我有一个将大小类型作为参数的类,以防人们不想使用 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()
{
    // ...
}

这给出了同样的错误。

还是别的什么?

谢谢!

【问题讨论】:

    标签: c++ class templates header


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你几乎明白了。您必须像在声明中一样堆叠templates:首先是类,然后是成员。

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

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

      【讨论】:

      • 感谢您的帮助。
      • 这不仅仅是美学。有一个方便和维护的论点,即使你的实现不会走得太远。
      猜你喜欢
      • 2019-12-15
      • 2012-02-04
      • 1970-01-01
      • 2021-06-05
      • 2012-07-12
      • 1970-01-01
      • 2015-08-05
      • 2012-10-04
      • 1970-01-01
      相关资源
      最近更新 更多