类外部声明的c++类依赖类型
c++ class dependant typedef declared outside class
我有两个类,我称之为类a和类b。
在类a中,我定义了一些类型,如T5。
在类b中,我使用类a中定义的这些类型。
为了避免写
typename classA<T1,T2>::T5
在我的代码中,我想创建一个类独立的类型,我可以直接调用它的名字templatedClassA在这个例子中。模板参数仍然是参数化的,我将在将来的项目中使用类a和类b定义它们。
#include <cstdlib>
#include <iostream>
using namespace std;
//classA
template <class T1, class T2>
class classA
{
public:
typedef T1 T5;
classA();
};
template <class T1, class T2>
classA<T1,T2>::classA(){}
//end classA
template <class T1, class T2>
typedef classA<T1,T2> templatedClassA;
template <class T1, class T2>
typedef typename classA<T1,T2>::T5 T6;
//classB
template <class T3, class T4>
class classB
{
public:
classB();
};
template <class T3, class T4>
classB<T3,T4>::classB(){}
//end classB
int main(int argc, char *argv[])
{
classB<int, double> classBInstance;
system("PAUSE");
return EXIT_SUCCESS;
}
当编译上述代码时,我得到以下两个错误:
template declaration of `typedef class classA<T1, T2> templatedClassA'
template declaration of `typedef typename classA<T1, T2>::T5 T6'.
我做错了什么?
模板不能在typedef
声明中使用。你必须像这样把声明包装在一个类中:
template <class T1, class T2>
class templatedClassA {
typedef classA<T1, T2> type;
};
template <class T1, class T2>
class T6 {
typedef typename classA<T1, T2>::T5 type;
};
在c++ 11中,您可以使用using
别名,如另一个答案所示。
在c++ 11中,您可以这样做:
template <class T1, class T2>
using templatedClassA = classA<T1, T2>;
template <class T1, class T2>
using T6 = typename classA<T1, T2>::T5;
相关文章:
- 如何从C++中的依赖类型中获得它所依赖的类型
- 当基类是依赖类型时,这是一个缺陷吗
- 通过依赖类型使用非类型模板参数的单类型模板参数类模板的部分专用化
- 为什么不需要在 C++20 中的依赖类型之前指定"typename"?
- 为什么在以下情况下不需要为依赖类型使用typename
- 提升multi_index获得依赖类型
- 继承依赖类型定义而不使用结构
- 依赖于依赖类型的非静态数据成员的非限定名称
- 依赖类型自动扣除
- 具有unordered_map的依赖类型
- 难以理解C++依赖类型与当前实例化上的内容
- 扣除其他类型的依赖类型
- C++:从依赖类型"Inferring"模板类型
- 编译器是否也将所有参数依赖类型实例化,即使超载函数的参数计数不匹配
- 限定依赖类型的类型定义
- 为什么对于依赖类型,单词 'typedef' 后面需要'typename'?
- 如何从模板化的类方法返回依赖类型
- 无法定义依赖类型定义的成员
- 如何在任意依赖类型上专门化模板
- 依赖类型不明确的 c++11 可变参数函数模板重载是否不明确