我有一个模板类,要求其模板参数具有嵌套类型。并且在其成员函数签名中使用这些类型。我发现以下解决方案来声明成员函数:
template <class ElementType>
class AKL_API AklMemoryPool
{
public:
typedef typename ElementType::DataType DataType;
typedef typename ElementType::RetrieveType RetrieveType;
...
RetrieveType Retrieve(unsigned int offset) const;
DataType* EstablishCUDA();
DataType* WriteToCUDA();
DataType* ReadFromCUDA();
DataType* GetCUDA();
...
};
但是我只能在类声明中定义函数。如果我尝试在外部定义它,例如:
template <class ElementType>
AklMemoryPool<ElementType>::RetrieveType AklMemoryPool<ElementType>::Retrieve(unsigned int offset) const
{
...
}
我得到编译错误。
这就是问题所在,因为我需要隐藏实现,因为它会在某些地方可见时产生编译错误。我仅将AklMemoryPool类用作基类,因此决定将实现移至cpp文件,并将其包括在继承类的cpp文件中。
所以这是一个问题:如何在类之外定义这些功能?
你必须用 typename
template <class ElementType>
typename AklMemoryPool<ElementType>::RetrieveType
AklMemoryPool<ElementType>::Retrieve(unsigned int offset) const
{
...
}
或在正确的上下文中使用类型(自C ++ 11起)
template <class ElementType>
auto
AklMemoryPool<ElementType>::Retrieve(unsigned int offset) const
-> RetrieveType
{
...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句