c++ - 源之外的命名空间定义
问题描述
我想将一些myClass
对象放在命名空间中并在我的主要功能中使用它们。以下策略有效,但命名空间定义占用了很多行,用户真的不需要看到它们。
如何将命名空间/变量初始化移动到包含的文件中?
// Main.C:
namespace Ns1{
myClass* mycA = new myClass(constant1A);
myClass* mycB = new myClass(constant1B);
/// ... lots more vars
}
namespace Ns2{
myClass* mycA = new myClass(constant2A);
myClass* mycB = new myClass(constant2B);
/// ... all/many of the same vars as in ns1
}
void main(){
int param = 0; // param determined in main()
Ns1::mycA->setOtherVars(param);
Ns2::mycB->accessSomething();
// clean up!?
}
我研究并尝试了很多可能的解决方案,但一切似乎都有陷阱。例如:
- 这些对象不是
consts
;如果他们是我认为这将解决一些问题。 static
初始化器很糟糕,尤其是对于用户定义的类型。- 全局变量很糟糕,所以我想避免这种情况。
- 我尝试在命名空间内(在头文件中)声明
initializeNs1Vars()
变量并调用andvector<myC*> getNs1Vars()
。我不记得那个出了什么问题。也许这是我最有前途的路线? - 乱用
extern
似乎增加了更多的代码。 - 还有怎么清理!?
编辑:好的,命名空间中的变量是隐蔽的全局变量。是否有另一种方法以更紧凑的方式定义大量变量?
void main(){
myClass* mycA_1 = new myClass(constant1A);
myClass* mycB_1 = new myClass(constant1B);
//... lots more objects
myClass* mycA_2 = new myClass(constant2A);
myClass* mycB_2 = new myClass(constant2B);
//... lots more objects
// as before
}
解决方案
推荐阅读
- google-sheets - 查找多重匹配和求和结果
- android - Sonarqube 未启动,退出代码 [es]:1
- python - 尝试安装 deezer 的 AI "spleeter"
- scala - Apache Spark 聚合:基于另一列值聚合列
- vue.js - Vuejs - 如何通过名称获取路径的路径?
- ios - 构建命令失败:CompileAssetCatalog - 适用于 iOS 的 Cordova
- kubernetes - Istio 出口流量不通过 istio istio-proxy sidecar 路由
- android - React Native Android Run Problem with Stuck Old Version without Re-bundling每次在MacOS上
- forms - 滚动条 Vb6 查询
- reactjs - 什么时候应该在 Material-UI 中使用排版?