从模板中调用类受保护的方法

时间:2011-08-09 00:36:03

标签: c++ templates protected

我希望有一个模板可以访问它的typename参数的受保护方法。我怎样才能做到这一点?

例如:

class Foo{
   ...
   protected:
     int Bar();
}

template <class T> FooTempl{
   ...
   int SomeMethod(T* ptr) { return ptr->Bar();};
   ...
}

原因是我希望模板可以访问方法Foo::Bar(),但不能访问任何其他外部调用方。我希望那里有一些friend语法可以使它工作......

2 个答案:

答案 0 :(得分:2)

将以下行添加到Foo

template<typename T> friend class FooTempl;

答案 1 :(得分:2)

FooTempl声明为Foo的朋友的替代方法是让前者来自后者。在这种情况下,由于FooFooTempl的基类,因此FooTempl::SomeMethod不再需要Foo *参数。

class Foo
{
   protected:
     int Bar() { return 42; }
};

template <class T> 
class FooTempl : public T
{
public:
   int SomeMethod() { return T::Bar();}
};

int main()
{
  FooTempl<Foo> bar;

  bar.SomeMethod();
}

哪种方法更合适取决于您的使用案例。