gpt4 book ai didi

c++ - 将方法限制为仅在 C++ 中的几个类

转载 作者:搜寻专家 更新时间:2023-10-31 01:49:51 25 4
gpt4 key购买 nike

我有一个通知类,它的接口(interface)类似于以下(有一些语法问题):

template<typename ...T>
Notification
{

public:
void addObserver(std::function<void (T...)> o);
void notify(T...);
};

然后有一个作为通知中心的主机类:

class NotificationCenter
{

public:
Notification<int, int> mPointChangedNotification;
};

最后,还有一个监听通知的实际观察者:

class Listener
{
void someFunction(int, int)
{
}

void SomeMethod(NotificationCenter &m)
{
m.mPointChangedNotification.addObserver(someFunction);
}
};

到目前为止一切顺利。但问题是通知功能甚至对实际观察者都是可见的,而它应该只能由 NotificationCenter 类访问。如果有人可以帮助解决这个设计问题,那将非常有帮助。

提前致谢。

最佳答案

如果您在设计访问控制策略时不需要太多的灵 active ,您可以简单地使 NotificationCenter 成为您的 Notificationfriend > 类模板(同样,赋予 notify() 私有(private)可访问性):

template<typename ...T>
Notification
{
public:
void addObserver(std::function<void (T...)> o);
private:
friend class NotificationCenter;
void notify(T...);
};

这样,NotificationCenter 将被允许调用 notify(),但所有其他客户端将只能访问 addObserver()


如果你想允许更多的灵 active ,你可以让 Notification 接受进一步的模板参数,并使该模板参数中指定的类型成为 friend >通知。然后,您可以为 notify() 提供私有(private)可访问性,以便其他非 friend 类无法调用它:

template<typename F, typename ...T>
Notification
{
public:
void addObserver(std::function<void (T...)> o);
private:
friend class F;
// ^^^^^^^^^^^^^^^
void notify(T...);
};

关于c++ - 将方法限制为仅在 C++ 中的几个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15973123/

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