源外的命名空间定义

时间:2018-10-26 16:32:25

标签: c++ namespaces

我想将一些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()vector<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
}

0 个答案:

没有答案