C++ 从模板调用受类保护的方法
我想有一个模板,可以访问它的typename参数的受保护方法。我怎样才能做到这一点 例如:C++ 从模板调用受类保护的方法,c++,templates,protected,C++,Templates,Protected,我想有一个模板,可以访问它的typename参数的受保护方法。我怎样才能做到这一点 例如: class Foo{ ... protected: int Bar(); } template <class T> FooTempl{ ... int SomeMethod(T* ptr) { return ptr->Bar();}; ... } class-Foo{ ... 受保护的: int-Bar(); } 模板脚模板{ ... ints
class Foo{
...
protected:
int Bar();
}
template <class T> FooTempl{
...
int SomeMethod(T* ptr) { return ptr->Bar();};
...
}
class-Foo{
...
受保护的:
int-Bar();
}
模板脚模板{
...
intsomethod(T*ptr){return ptr->Bar();};
...
}
原因是我希望方法
Foo::Bar()
可以被模板访问,但不能被任何其他外部调用方访问。我希望那里有一些friend
语法可以让它工作…在Foo
中添加以下行:
template<typename T> friend class FooTempl;
模板朋友类footemp;
在Foo
中添加以下行:
template<typename T> friend class FooTempl;
模板朋友类footemp;
将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();
}
class-Foo
{
受保护的:
int Bar(){return 42;}
};
模板
等级:公共T
{
公众:
int somethod(){return T::Bar();}
};
int main()
{
脚柱杆;
bar.SomeMethod();
}
以下哪种方法更合适取决于您的用例。将
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();
}
class-Foo
{
受保护的:
int Bar(){return 42;}
};
模板
等级:公共T
{
公众:
int somethod(){return T::Bar();}
};
int main()
{
脚柱杆;
bar.SomeMethod();
}
这些方法中哪一种更合适取决于您的用例。除了访问级别之外,它应该是
ptr->Bar()
,而不是T->Bar()
为什么您不能将friend直接添加到Foo
body?@tyz您的意思是什么?如何friend
a模板?这就是问题的关键所在:-)除了访问级别之外,它应该是ptr->Bar()
,而不是T->Bar()
为什么不能直接将好友添加到Foo
body?@tyz你是什么意思?如何friend
a模板?这就是问题的关键所在:-)我不知道我以前试过的时候做错了什么,但它似乎起作用了……我不知道我以前试过的时候做错了什么,但它似乎起作用了。。。。