Как создать таблицу строк

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

Я использовал второй пример здесь (скопирован ниже для справки), но он немного освещает детали того, как это должно работать на самом деле. Похоже, что все повторно инициализируется в 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) вместе в сегменте данных только для чтения полученного исполняемого файла.

Это разумный, простой подход к обработке статических строк, хотя вы, вероятно, хотите что-то более динамичное / сложное, если вам нужно обрабатывать локализацию или другие сложности.

Другие вопросы по тегам