【发布时间】:2015-04-07 13:40:45
【问题描述】:
我有一个模板类,它要求它的模板参数具有嵌套类型。它在其成员函数签名中使用这些类型。我找到了以下解决方案来声明成员函数:
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 文件中。
所以这里有一个问题: 如何在类外定义这些函数?
【问题讨论】: