gpt4 book ai didi

c++ - 在类外封装数据

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

我正在编写一些 C++ 函数,这些函数将生成数据,这些数据以后可能会或可能不会被这些函数处理(但不会在其他任何地方处理)。这些功能是一些更高级别的 GUI 更改的“低级别”。

我目前将这些函数包装在一个单独的命名空间中,并声明了一个静态(内部链接) vector 以将这些对象包含在 vector 中(这些对象被定义为结构,也包含在命名空间中)。因此,一般结构:

namespace Foo
{
struct Bar
{
string data;
};

void func1();
void func2();
static std::vector<Bar> cachedBars;
}

我真的不需要为此上课,并且对求助于单例不感兴趣。这个解决方案是否足够?具体来说,内部链接命名空间范围的集合是否是限制对该集合的访问以及避免全局变量的所有陷阱的最佳方式,还是有更好的方式?

最佳答案

实际上,我只是将函数的声明放在 .h 中

void func1();
void func2();

以及隐藏在匿名命名空间下的 .cpp 中的内容。

namespace
{
struct Bar
{
string data;
};

static std::vector<Bar> cachedBars;
}

void func1() { /* do something */ }
void func2() { /* do something else */ }

有了它,func1 和 func2 就可以从任何地方访问,但是 Bar 和 cachedBars 只能通过 .cpp 中定义的函数访问,所以 func1 和 func2。如果 .cpp 中没有其他内容,则只有 func1 和 func2 能够修改 cachedBars。

以防万一您不知道,匿名命名空间在用于修改可见性时与静态关键字具有相同的效果。但是,它更强大,因为您几乎可以用它隐藏任何东西。

关于c++ - 在类外封装数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10405044/

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