繁体   English   中英

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

[英]Calling a class protected method from a template

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

例如:

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

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

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

Foo下行添加到Foo

template<typename T> friend class FooTempl;

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();
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM