У меня есть большое приложение, содержащее вызовы связанных функций, например:
subsystem.
do_stuff(cfg().get("x")).
do_stuff(cfg().get("y"));
Здесь subsystem
- это объект типа класса:
struct Sybsystem
{
Sybsystem& do_stuff(int parameter)
{
... // much code
return *this; // this line makes it possible to chain calls
}
};
Также, cfg()
- это «глобальная функция», которая возвращает объект конфигурации:
struct Configuration
{
int get(const char* param_name);
}
Configuration& cfg();
Код с вызовами связанных функций сначала выполняет операции с x
, затем с y
;однако C ++ не определяет, когда параметры конфигурации для x
и y
извлекаются из объекта конфигурации.Действительно, когда я запускаю свое приложение в режиме отладки и выпуска (MS Visual Studio 2005), порядок вызовов Configuration::get
противоположен.
Все было хорошо, пока мы не добавили поддержку возврата случайных значений из Configuration::get
(для тестирования).Когда мы это сделали, поведение в режиме отладки и выпуска стало другим.
Так что мой вопрос:
Могу ли я решить эту проблему и все еще использовать цепочечные вызовы функций?(у нас есть много кода, написанного таким образом; было бы утомительно все это менять)
Могу ли я использовать, например, трюки с volatile
?