如何向模板类声明模板友元函数?

时间:2012-05-18 23:41:52

标签: c++ templates

很抱歉,这个问题似乎已被多次询问,但我无法得到其他答案,以便我的设置工作。我有以下类和函数设置:

namespace ddd {
  template <typename T>
  class A {
    ...
  };

  template <typename T, typename U>
  A<T> a_func(const A<U> &a) {
    ...
  }
}

我想将a_func声明为A的朋友,我希望它能使a_func成为A的所有实例的朋友,无论哪个类型名用于T和U(例如,a_func可以访问A)

谢谢!

1 个答案:

答案 0 :(得分:1)

你可以这样做(看起来就像你拥有它一样):

template<typename X>
class A {
    template<typename T, typename U>
    friend A<T> a_func(const A<U>& a);
};

template<typename T, typename U>
A<T> a_func(const A<U>& a) {
    // whatever
}

Demo