B类使用模板,模板是A类的私有成员。
我尝试了朋友声明,但模板在上下文中仍然是私有的。
如何让B使用A的私人模板?
测试(也在godbolt.org):
#include <iostream>
#include <vector>
template <class T>
class A {
private:
template<typename R> using V = std::vector<R>;
};
template <typename T, class Prev>
class B {
public:
friend Prev;
typename Prev::template V<T> v_;
};
int main() {
B<int, A<int>> b;
return 0;
}
编译错误:
error: ‘template<class R> using V
= std::vector<R, std::allocator<_CharT> >’
is private within this context
typename Prev::template V<T> v_;
^~
答案 0 :(得分:0)
修复(也在godbolt.org)
#include <iostream>
#include <vector>
template <typename T, class Prev> class B;
template <class T>
class A {
template <typename T2, class Prev>
friend class B;
private:
template<typename R> using V = std::vector<R>;
};
template <typename T, class Prev>
class B {
public:
typename Prev::template V<T> v_;
};
int main() {
B<int, A<int>> b;
return 0;
}