混合模板 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 正文中定义函数来简化代码,但我知道出于审美原因,有些人更喜欢将声明与定义分开。
我有一个 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 正文中定义函数来简化代码,但我知道出于审美原因,有些人更喜欢将声明与定义分开。