使用声明来表示模板声明中的类型
Using declaration to denote a type within a template declaration
>我有以下模板声明:
template <typename T1, typename T2>
class tree{
public:
tree(int,T2&);
~tree();
...
rNodePtrIter travPreord(int);
void travInord();
rNodePtrIter travInord(int);
void travPostord();
rNodePtrIter travPostord(int);
private:
NodePtrIter hierarchy;
};
我在模板声明的正上方声明了 rNodePtrIter 类型,如下所示:
using rNodePtrIter = list<unique_ptr<node<T1>>>::iterator&;
这不会编译,因为编译器抱怨类型 T1 未知:
错误:使用未声明的标识符"T1">
有没有办法进入上面的使用声明,以便我可以在我的模板声明中使用别名 rNodePtrIter,而不是更长的替代方案?
蒂亚
维诺德
只需在模板内移动类型别名声明:
template <typename T1, typename T2>
class tree{
public: using rNodePtrIter = typename list<unique_ptr<node<T1>>>::iterator&;
请注意,它要求已经声明node
模板。
您可以使用别名模板:
template<typename T1>
using rNodePtrIter = typename list<unique_ptr<node<T1>>>::iterator&;
然后将类中的rNodePtrIter
替换为 rNodePtrIter<T1>
。
相关文章:
- std::enable_if 更改成员 *变量* 声明/类型
- 对前向声明类型进行unique_ptr的解决方法
- 如何将声明类型作为参数发送
- 在 Fortran 中泛化特定声明类型的操作
- 使用 (c++11) 声明类型时放置 __declspec(dllimport) 关键字的位置
- 模板函数可以使用带有删除的构造函数的声明类型
- 声明类型没有任何可变类型
- 如何使用声明类型简化此代码
- 使用声明类型选择函数专业化
- 替代班级内声明类型的别名
- 对于自动键入推论的参数,声明类型(自动)应推导的内容
- 使用 decltype 的条件声明类型
- 您如何声明类型结构的堆栈?在C 中
- 将指向前向声明类型的指针推送到 typedef'd 向量时出现编译器错误
- 声明适用于 auto,但不能显式声明类型?
- 声明类型包含未展开的参数包'Args'
- 课堂上的Typedef.在另一个类错误中:尚未声明类型
- 冲突的声明类型/价值不匹配
- 获取具有AST访问者clang的功能声明类型
- 变量声明类型定义 C 中的约定