Обтекание констант сообщения в пространстве имен - PullRequest
2 голосов
/ 20 июля 2011

У меня есть серия константных строк, которые соответствуют идентификаторам сообщений;Я пытаюсь создать централизованное место для этих констант, так как они используются в различных классах в моем приложении.Первоначально я собирался создать пространство имен, содержащее их:

// MessageIDs.hh
namespace MessageIDs {
  const std::string kMessage1("Message1");
  ...
}

Затем я начал читать об определениях внутренней / внешней связи, и теперь у меня есть пара вопросов.

1) Является лиединственный недостаток в том, что константы не выходят за пределы того факта, что я не смог бы использовать их в качестве аргументов шаблона, поскольку они будут иметь внутреннюю связь?

2) Есть ли какой-то другой недостаток в моем подходе, о котором я не знаю

1 Ответ

2 голосов
/ 20 июля 2011

1) Я вижу одно определенное преимущество этого подхода: вы всегда видите значение определенной константы в нужном месте.Т.е., если константы определены как extern, вам нужно было бы поместить определения в один cpp-файл вместе с инициализаторами и оставить заголовок с extern const без значения, что могло бы немного ввести сторонников в заблуждение.

Недостаток, который вы упомянули (невозможность использовать их в качестве параметра шаблона), на самом деле второстепенный, вам часто нужен параметр шаблона std :: string?К счастью, я их не видел.

2) Может быть, еще одним второстепенным является то, что у вас есть дубликаты объектов std :: string на самом деле в каждой единице перевода, включая заголовочный файл, это можно считать недостатком.

В данном конкретном случае строковых констант, похоже, что const char * является лучшим решением для всех случаев.

...