如何定义一个模板类函数,该函数在类外的签名中具有嵌套类型的模板参数
How to define a template class function with nested type of the template argument in its signature outside the class
我有一个模板类,它的模板参数要求具有嵌套类型。它在成员函数签名中使用这些类型。我找到了以下声明成员函数的解决方案:
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
{
...
}
您必须在AklMemoryPool<ElementType>::RetrieveType
之前使用typename
关键字,如下所示:
template <class ElementType>
typename AklMemoryPool<ElementType>::RetrieveType AklMemoryPool<ElementType>::Retrieve(unsigned int offset) const
{
//...
}
你可以在这里看到它是如何编译的。
您需要typename
:
template <class ElementType>
typename AklMemoryPool<ElementType>::RetrieveType
^^^^^^^^
AklMemoryPool<ElementType>::Retrieve(unsigned int offset) const
{
...
}
相关文章:
- CRTP:为什么获得嵌套类型和派生类的嵌套方法有区别
- 是否可以指定 C++20 个模板化 lambda 来推断嵌套在参数中的类型?
- 为什么在VS2015中模板相关的嵌套类型名称中不需要typename关键字?
- 为什么嵌套类型的基类不需要"typename"?
- 如何在C++中的另一个模板函数中使用属于模板化类的嵌套类型?
- 保持嵌套类型的挥发性
- 类模板的嵌套模板参数推导不起作用
- 具有嵌套类型的类的概念
- 如何设置嵌套模板参数
- 如何定义一个模板类函数,该函数在类外的签名中具有嵌套类型的模板参数
- 访问模板参数T的嵌套类型,即使T是指针
- 将类型的嵌套类型引用为类模板的参数的问题
- 嵌套类型作为基类的模板参数
- 涉及嵌套模板参数和默认值的模板类型推导
- 嵌套模板参数时,我已经知道的类型名
- 我们是否需要在嵌套类型的成员参数前面加上"::"?
- 是否可以基于模板类型参数的嵌套类型定义来专门化模板定义
- 使用模板类的嵌套类型作为模板参数
- 为什么不允许非类型参数中的部分专用化使用嵌套模板参数
- 嵌套模板参数和类型推断