使用好友声明访问私人模板

时间:2018-05-11 16:27:09

标签: c++ templates friend

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_;
                                  ^~

1 个答案:

答案 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;
}