c++ - 使用声明来表示模板声明中的类型

标签 c++ templates using

我有以下模板声明:

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 未知:

error: use of undeclared identifier 'T1'

有没有办法像上面那样进入 using 声明,这样我就可以在我的模板声明中使用别名 rNodePtrIter,而不是更长的替代方案?

TIA

红酒

最佳答案

只需在模板中移动类型别名声明:

template <typename T1, typename T2>
class tree{
public: using rNodePtrIter = typename list<unique_ptr<node<T1>>>::iterator&;

请注意,它需要已声明的 node 模板。

关于c++ - 使用声明来表示模板声明中的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48149126/

相关文章:

c++ - GCC 中优先队列的奇怪 shared_ptr 比较器选择

c++ - 头文件中内联自由函数的可移植性

c++ - 跟踪实例化模板类型 C++

c++ - static_pointer_cast 通过继承和模板

c# - 我可以指定默认的 "using"由 resharper 添加吗?

c++ - 在链接规范(extern "C",extern "C++")中,在 C++ 代码中包含标准 C header 的指定行为是什么?

c++ - 编译没有对应头文件的cpp

c++ - 检查 lambda 是否为 noexcept

c++ - 在 C++ 中的 "using namespace::X"中的前导::是什么意思

SQL Server 相当于 MySQL 的 USING