Определение пространства имен вне источника - PullRequest
0 голосов
/ 26 октября 2018

Я хочу поместить несколько 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, казалось, просто добавил намного больше кода.
  • А как насчет очистки!?

EDIT: ОК, переменные в пространствах имен являются завуалированными глобальными переменными.Есть ли другой способ определить множество переменных более компактным способом?

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...