在类中声明与父类具有相同类型的模板类
declare template class within class with same types as parent class
类范围内的类的花哨的cout/shift operator<<
。
template <typename X, typename Y> class Foo {
public:
template <typename A, typename B> class Bar {
A a;
B b;
};
Bar<X,Y> baba;
};
template <typename V, typename W>
std::ostream &operator<< (std::ostream& os, Foo<V,W>::template Bar<V,W> *b) {return os;}
这不会编译。但是如何正确地做到这一点呢?
错误:
error: expected template-id for type before ‘*’ token
std::ostream &operator<<(std::ostream &os, Foo<V, W>::template Bar<V, W> *b)
它应该是:
template <typename V, typename W>
std::ostream &operator<< (std::ostream& os, typename Foo<V,W>::template Bar<V,W> &b) {return os;}
但是更改类可能更简单:
template <typename X, typename Y> class Foo {
public:
class Bar {
X a;
Y b;
};
Bar baba;
};
template <typename V, typename W>
std::ostream &operator<< (std::ostream& os, const typename Foo<V,W>::Bar& b) {return os;}
真正的解决方案(为了避免类型推导问题)是将 free 函数放在类中:
template <typename X, typename Y> class Foo {
public:
class Bar {
X a;
Y b;
friend
std::ostream &operator<< (std::ostream& os, const Bar &b) {return os;}
};
Bar baba;
};
相关文章:
- 将类型声明为类型模板参数的模板参数的一部分是否合法?
- 当返回类型声明为 ListNode 时,我们是否可以返回 false<T>*
- 如何使用自定义类型声明Arduino数组?
- 将函数参数类型声明为 auto
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 在没有标识符的情况下如何读取复杂的C++类型声明?
- 模板函数参数显式类型声明
- 使用指针遍历一系列基元类型声明?
- 字符类型声明和验证
- 使用本地类型声明的G lambda被使用但从未定义 - 确实是一个错误
- 为什么 c++ lambda 捕获不需要类型声明?
- 为什么没有"int"类型声明时输出不同?
- C++如何使用虚拟基类型声明全局静态分配的变量
- 我可以使用预处理器将一个类型声明替换为另一个类型声明吗?
- 如何将数据类型声明从.cpp文件传输到 .cu 文件
- C++17 枚举类型声明
- 条件类型声明
- 具有特定参数的特定构造函数的类型声明
- 我可以使用相同的名称为周围作用域中的类型声明成员类型别名吗
- 函数调用之前,C 类型声明