![](/img/trans.png)
[英]Calling protected ctor of inheriting class from within static template method of base class fails
[英]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
的朋友的另一种方法是让前者来自后者。 在这种情况下,由于Foo
是FooTempl
的基类,因此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.