我有一个模板类,需要从其模板参数中获得嵌套类型.它在其成员函数签名中使用这些类型.我找到了以下解决方案来声明成员函数:
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();
...
};
Run Code Online (Sandbox Code Playgroud)
但我只能在类声明中定义函数.如果我尝试在外面定义它:
template <class ElementType>
AklMemoryPool<ElementType>::RetrieveType AklMemoryPool<ElementType>::Retrieve(unsigned int offset) const
{
...
}
Run Code Online (Sandbox Code Playgroud)
我得到编译错误.
这是问题,因为我需要隐藏实现,因为如果从某些地方可以看到它会产生编译错误.我只使用AklMemoryPool类作为基类,所以我决定将实现移动到cpp文件并将其包含在继承类的cpp文件中.
所以这是一个问题:如何在课外定义这些函数?
你必须使用 typename
template <class ElementType>
typename AklMemoryPool<ElementType>::RetrieveType
AklMemoryPool<ElementType>::Retrieve(unsigned int offset) const
{
...
}
Run Code Online (Sandbox Code Playgroud)
或者在正确的上下文中使用类型(从C++ 11开始)
template <class ElementType>
auto
AklMemoryPool<ElementType>::Retrieve(unsigned int offset) const
-> RetrieveType
{
...
}
Run Code Online (Sandbox Code Playgroud)