Estoy usando Qt, pero esta es una pregunta genérica de C++. Mi caso es simple, tengo una clase Constants
que tiene un miembro estático constante que quiero que se inicialice después de realizar ciertas llamadas a funciones.C++ ¿es posible retrasar la inicialización del miembro estático constante?
constants.h
#ifndef CONSTANTS_H
#define CONSTANTS_H
class Constants
{
public:
static const char* const FILE_NAME;
};
#endif // CONSTANTS_H
Constants.cpp
#include "constants.h"
#include <QApplication>
const char* const Constants::FILE_NAME = QApplication::applicationFilePath().toStdString().c_str();
main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"
#include "constants.h"
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
qDebug()<< "name: "<<Constants::FILE_NAME;
//for those who are unfamiliar with Qt, qDebug just prints out
return a.exec();
}
Al compilar llegué:
QCoreApplication :: applicationFilePath: crea una instancia del objeto QApplication primero
El problema aquí es obvio. Cuando se llama a la función estática de QApplication en Constants.cpp QApplication aún no está instalado por Qt. Tengo que esperar de alguna manera hasta que se pase la línea QApplication a(argc, argv);
en main.cpp
¿es posible y, si no, qué más podría sugerir para superar esto?
gracias
¿No lo declara como una constante? Definitivamente no es una constante ya que depende de algún estado en el inicio de la aplicación. – m0skit0
pero necesito que se lea solo cuando se asigna? – destan
Podría estar equivocado, pero 'QApplication :: applicationFilePath(). ToStdString()' me parece temporal, en cuyo caso está almacenando un puntero a datos no válidos. –