如何在类外部的签名中定义模板类参数的嵌套类型的模板类函数

Hva*_*nah 3 c++ templates

我有一个模板类,需要从其模板参数中获得嵌套类型.它在其成员函数签名中使用这些类型.我找到了以下解决方案来声明成员函数:

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文件中.

所以这是一个问题:如何在课外定义这些函数?

Jar*_*d42 7

你必须使用 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)