我先解释一下我的情况。
我有一个基类,它自动实现一种引用计数。它允许我包装 C 风格init()
and free()
库调用引用计数 API。
template<typename T>
class Service {
public:
Service() {
if(s_count++ == 0) {
T::initialize();
}
}
~Service() {
if(--s_count == 0) {
T::terminate();
}
}
private:
static int s_count;
};
template<typename T>
int Service<T>::s_count = 0;
希望实现这些初始化器和终止器的类将从Service
像这样:
class Test : public Service<Test> {
friend class Service<Test>;
private:
static void initialize() {
std::cout << "Initialized" << std::endl;
}
static void terminate() {
std::cout << "Terminated" << std::endl;
}
};
然而,声明很混乱,因为我必须继承我的并成为我的朋友Service
班级。有没有办法允许基类自动访问派生类的受保护或私有成员?如果没有,我不妨问是否有更好的方法来写我在这里所做的事情。
“有什么方法可以让基类自动访问派生类的受保护或私有成员吗?”
基类无法正式访问派生类的私有/受保护成员。一般来说,基类的设计方式使得它们不需要了解派生类的任何信息。因此,如果需要从基类访问派生类中的成员,那么您应该重新考虑您的设计。
编辑(根据 @RSahu 提议的文章):-
尽管在某些情况下,从基类访问派生类的成员函数可能很有用。就像在两个进程之间共享对象一样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)