我想要一个可以访问其类型名参数的 protected 方法的模板。我怎样才能让它发挥作用?
例如:
class Foo{
...
protected:
int Bar();
}
template <class T> FooTempl{
...
int SomeMethod(T* ptr) { return ptr->Bar();};
...
}
原因是我希望方法 Foo::Bar()
可以被模板访问,但不能被任何其他外部调用者访问。我希望那里有一些 friend
语法可以让它工作......
最佳答案
将 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();
}
哪种方法更合适取决于您的用例。
关于c++ - 从模板调用类保护方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6990223/