C ++: сохранить глобальное значение по адресу памяти - или альтернативным способом - PullRequest
0 голосов
/ 22 августа 2011

В настоящее время я настраиваю некоторый код пиксельного шейдера, написанный на C ++ компьютерной игры.Мне нужен способ для хранения глобального значения (целое число или число с плавающей запятой) таким образом, чтобы его можно было получить позже (в рамках того же процесса).Поскольку все кажется выполненным «без сохранения состояния» во время выполнения, это не поможет просто объявить и использовать статическую переменную (переменную класса), как я обычно делал бы в этой ситуации.

Таким образом, я натолкнулся на идею сохранениямое глобальное значение для конкретного адреса памяти, и получить его оттуда позже.Моя проблема в том, что я понятия не имею, возможно ли это вообще и как это сделать.Я прочитал эти вопросы, но пока не нашел ответа:

Создать новый объект C ++ по определенному адресу памяти?

Указатель на определенный фиксированный адрес

Назначение определенного адреса памяти из другой программы и изменение его значения

Назначение значения определенному адресу

Возможно ли это даже в Windows Vista или 7, и если да, то как?У меня нет возможности включить какую-либо библиотеку, но я должен достичь чего-либо с помощью встроенной функциональности c ++.

Если это невозможно (или не так просто), существуют ли альтернативные способы действительно хранить некоторые значения глобально (не как класс)переменная) так, чтобы к нему могли обращаться другие классы / экземпляры в рамках того же процесса?Может быть, какая-то сессия или кеш приложения, как в .NET или Java?

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 22 августа 2011

Я должен признать, что не понял, почему static не будет работать в вашем случае, поэтому моё предложение также может не сработать. Вы можете просто использовать синглтон, как это:

class VariableStorage
{
public:
    int getVar(string name);
    void setVar(string name, int value);

    static VariableStorage* instance();

    //...

protected:
   VariableStorge() { static obj = 0; if(!obj) obj = new VariableStorage(); return obj; }
   // ...
}
...