gpt4 book ai didi

c++ - 在没有 friend 的情况下授予对基类的 protected 访问权限

转载 作者:行者123 更新时间:2023-11-28 06:33:02 25 4
gpt4 key购买 nike

我将从解释我的情况开始。

我有一个基类可以自动实现一种引用计数。它允许我将 C 风格的 init()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 类并将其作为友元。 有什么方法可以让基类自动访问派生类的 protected 或私有(private)成员吗?如果没有,我不妨问问是否有更好的方法来编写我在这里所做的事情。

最佳答案

“有什么方法可以让基类自动访问派生类的 protected 或私有(private)成员吗?”

基类不能正式访问派生类的私有(private)/保护成员。通常,基类的设计方式使得它们不需要了解派生类的任何信息。因此,如果需要从基类访问派生类中的成员,那么您应该重新考虑您的设计。

编辑(根据@RSahu 提议的文章):-

尽管在某些情况下从基类访问派生类的成员函数可能很有用。就像您在两个进程之间共享对象一样。

关于c++ - 在没有 friend 的情况下授予对基类的 protected 访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27211180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com