C++中的独立功能/数据

Standalone functions/data in C++

本文关键字:数据 功能 独立 C++      更新时间:2023-10-16

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

namespace my_namesp {
class C1 {
public:
  blah1;
  ...
private:
  blah2;
...
};
class C2 {
public:
  junk1;
  ...
private:
  junk2;
  ...
};
} //-End namespace

现在假设在实现 (CPP) 中,我定义了 C1、C2 的所有成员函数,然后假设我有一些我希望 C1 和 C2 共享的公共数据,比如枚举和字符串数组,但我不一定希望它们是任何一个类的一部分。那么执行以下操作是否合法(注意:它构建并工作正常);如果我将此实现导出为客户端应用程序的库,该怎么办?这还能行吗?这种设计是否出于我应该注意的任何原因而皱眉?也许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 文件中的匿名命名空间中,这样以后就不会有链接器符号冲突的风险(即,如果库客户端贸然向命名空间添加某些内容并意外重用您的"私有"名称之一)。

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(...) {
       ...
    }
}