gpt4 book ai didi

c++ - C++ 中的独立函数/数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:30:43 24 4
gpt4 key购买 nike

我不确定这一点,搜索了一下也没有发现任何特别有用的东西。因此,假设我有一个头文件,其 namespace 包含一些类 C1 和 C2;

namespace my_namesp {

class C1 {
public:
blah1;
...
private:
blah2;
...
};

class C2 {
public:
junk1;
...
private:
junk2;
...
};

} //-End namespace

现在假设在实现 (CPP) 中,我定义了 C1、C2 的所有成员函数,然后假设我有一些我希望 C1 和 C2 共享的公共(public)数据,比如一个枚举和一个字符串数组,但是我不一定希望他们成为任何一个类(class)的一部分。那么执行以下操作是否合法(注意:它构建并运行良好);如果我将此实现导出为客户端应用程序的库又如何呢?这还能用吗?出于我应该知道的任何原因,这种设计是否令人不悦?也许 OOP 的某个特定功能可能更适合这种事情?

namespace my_namesp {

enum some_list_num {
list_member1,
list_member2,
...,
list_length
}

static const std::string string_list[] = {
str1,
str2,
...,
strN
}

return_type C1::some_func1(...) {
...
}

...

return_type C1::some_func1(...) {
...
}

} //-End my namespace

再次提前感谢您的任何想法/更正。

最佳答案

如果 C1 和 C2 共享一些应该保留在翻译单元本地的实现细节,那很好。

最好将它们放在 cpp 文件中的匿名命名空间中,这样以后就不会有链接器符号冲突的风险(即,万一库客户端草率地向您的命名空间添加了一些东西并意外地重用了您的“私有(private)”之一"名称)。

cpp 文件可能如下所示:

namespace { // private implementation details

enum some_list_num {
list_member1,
list_member1,
...,
list_length
}

static const std::string string_list[] = {
str1,
str2,
...,
strN
}

}

namespace my_namesp { // define externally-visible functions etc.

return_type C1::some_func1(...) {
...
}

return_type C1::some_func1(...) {
...
}
}

关于c++ - C++ 中的独立函数/数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11197992/

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