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

赫瓦尔纳

我有一个模板类,要求其模板参数具有嵌套类型。并且在其成员函数签名中使用这些类型。我发现以下解决方案来声明成员函数:

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

所以这是一个问题:如何在类之外定义这些功能?

贾罗德42

你必须用 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在模板类中使用嵌套类作为类型?

如何在C ++中的另一个模板函数中使用属于模板化类的嵌套类型?

如何在类内引用嵌套模板参数的嵌套类型?

如何使用模板模板参数类型的引用类型模板参数定义类模板

如何在类的方法参数中使用模板

如何定义返回嵌套类对象的模板类的成员函数

如何在C ++中使用通用引用参数为模板类编写构造函数

如何在具有模板函数的类中使用类型安全的并集(变量)?

在C ++中使用模板化类的嵌套类作为模板模板参数

如何使用参数调用类模板函数

如何在模板函数中实现模板类类型?

如何使用模板类型作为函数参数派生抽象模板类(C ++ 11)

嵌套类型作为基类的模板参数

sizeof childclass 如何在父模板类中使用子类作为模板参数?

如何在类模板内的私有嵌套类中使用boost :: intrusive_ptr

如何在类模板之外定义类模板的构造函数模板?

模板化函数语法错误中使用的模板化类中的嵌套类

Typedef 在模板化类中使用模板化嵌套类

如何在参数模板其他类中使用某个类?

如何在C ++中为不同的模板类型使用不同的类定义?(类超载?)

何时在constexpr函数中使用模板非类型类或普通参数

从类定义中推断模板参数类型

如何确定从类模板继承的模板参数的基础模板类型?

模板参数类的函数调用的返回类型

在构造函数的可变参数中使用其他模板类执行模板类的初始化

在没有模板参数的类模板中使用类名

如何使用相同的参数构造嵌套类模板的对象?

在模板化类中使用嵌套嵌套类时,“依赖名称不是类型”

如何在类中为模板定义类型别名