Как создать таблицу строк
Странно, что почти нет онлайн-документации по этому вопросу. У меня есть приложение с жестко закодированными строками для пользовательского интерфейса и различными другими вещами, разбросанными по источнику. Я пытаюсь собрать хотя бы некоторые из них, потому что некоторые из них должны меняться в зависимости от платформы, для которой компилируется приложение.
Я использовал второй пример здесь (скопирован ниже для справки), но он немного освещает детали того, как это должно работать на самом деле. Похоже, что все повторно инициализируется в project_strings.cpp
и код никогда не вызывается.
// in your project_strings.h
namespace MyProjectStrings {
const char *password;
...
}
// the project_strings.cpp for the strings
#include "project_strings.h"
namespace MyProjectStrings {
const char *password = "Password:";
...
}
// some random user who needs that string
#include "project_strings.h"
std::string password(MyProjectStrings::password);
Может кто-то объяснить это или сказать мне, что это ужасная идея, и я должен сделать что-то еще?
1 ответ
Пример, на который вы ссылаетесь, просто объявляет const char*
s в пространстве имен в заголовочном файле, а затем определяя их в файле.cpp. Синтаксис используется неправильно для C++, хотя - объявления в заголовочном файле должны быть extern const char*
скорее, чем const char*
как const
Значения по умолчанию для внутренней связи в C++.
Большинство наборов инструментов компилятора / компоновщика C++ помещают все строки из одного блока перевода (project_strings.cpp
) вместе в сегменте данных только для чтения полученного исполняемого файла.
Это разумный, простой подход к обработке статических строк, хотя вы, вероятно, хотите что-то более динамичное / сложное, если вам нужно обрабатывать локализацию или другие сложности.