Вы можете использовать статическую функцию, которая возвращает инициализированную карту:
// source file:
QMap<column_t, QString> LogEvent::initColumnNames() {
QMap<column_t, QString> map;
map.insert(LogEvent::TIMESTAMP_COLUMN,"Timestamp");
// and so on
return map;
}
QMap<column_t, QString> LogEvent::COLUMN_NAMES = initColumnNames();
Также, если вы хотите использовать интернационализацию строк в статических переменных и вам нужно сначала вызвать QTextCodec::setCodecForTr
, это хорошая идея дляпереместите статическую переменную в ее функцию получения:
class LogEvent {
public:
// ...
static QMap<column_t, QString> initColumnNames();
static QMap<column_t, QString> getColumnNames() {
static QMap<column_t, QString> COLUMN_NAMES = initColumnNames();
return COLUMN_NAMES;
}
}
Таким образом COLUMN_NAMES
будет инициализирован с первым вызовом getColumnNames()
, и вы можете заранее установить текстовый кодек.Но это не потокобезопасно.