2015-06-12 5 views
0

В какое-то свободное время я работаю над каким-то физическим симуляционным кодом, чтобы я: а) имел фреймворк, который нужно строить в будущем, и б) держись свежим с C++. У меня есть несколько значений (скорость света, размер коробки, количество частиц, что-то вроде этого), что почти каждая часть программы нуждается, но я бы очень хотел дать пользователю возможность указать эти значения во входе. cfg file (так что такие вещи, как #DEFINE + a constants.h файл не будет работать). Я могу, конечно, хорошо прочитать эти ценности, но каков обычный/лучший способ сделать их доступными во многих разных модулях?Как организовать глобальные переменные ввода?

ответ

1

Вместо того, чтобы куча других несвязанных глобальных переменных, почему бы не сделать struct или class, чтобы содержать их, и есть функция, которая извлекает или обновляет текущее состояние конфигурации?

Например, в качестве struct вы можете реализовать методы сериализации для чтения или записи в файл типа .cfg.

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

+0

Ах, да, конечно! Это работает намного лучше. У меня никогда не было причин использовать внешние объекты на C++; * один * объект, который содержит все, что касается текущей вселенной, отлично подходит для счета! –

2

Как насчет одноточечного:

class Universe { 
private: 
    Universe(); 

public: 
    static Universe& GetInstance(); 

    void Reload(); 

    double GetSpeedOfLight() const { return m_C; } 
    ... 

private: 
    double m_C; //!< Speed of light 
}; 

Universe& Universe::GetInstance() { 
    static Universe instance; 
    return instance; 
} 

Universe::Universe() { 
    Reload(); 
} 

void Universe::Reload() { 
    // load your constants 
} 
Смежные вопросы