У меня есть класс Foo из сторонней библиотеки, в которой есть много сеттеров с аргументом строки, называемого как set_ parameter_name (std :: string value). И мне нужно настроить экземпляр класса, используя простой анализатор, который возвращает необходимое значение требуемого параметра, например: < /p>
std::string value = parser.parse("parameter_name");
< /code>
Итак, код выглядит так: < /p>
Foo foo = Foo();
Parser parser = Parser();
foo.set_a(parser.parse("a"));
foo.set_b(parser.parse("b"));
// lots of strings
foo.set_z(parser.parse("z");
< /code>
Этот код довольно уродливый, поэтому я пытаюсь заменить его на макрос C ++. Идея заключается в использовании списка имен для автоматического генерации кода с помощью препроцессора, но я не могу представить, как это сделать.#define PARAM_LIST "a", "b", "c", "d" // lots of elements
#define PARAM_SETTER(foo, param, parser) ({ \
foo.set_#param(parser.parse(param)); \ //
Подробнее здесь: [url]https://stackoverflow.com/questions/79767439/using-c-macros-to-construct-a-method-name-to-call[/url]
У меня есть класс Foo из сторонней библиотеки, в которой есть много сеттеров с аргументом строки, называемого как set_ parameter_name (std :: string value). И мне нужно настроить экземпляр класса, используя простой анализатор, который возвращает необходимое значение требуемого параметра, например: < /p> [code]std::string value = parser.parse("parameter_name"); < /code> Итак, код выглядит так: < /p> Foo foo = Foo(); Parser parser = Parser(); foo.set_a(parser.parse("a")); foo.set_b(parser.parse("b")); // lots of strings foo.set_z(parser.parse("z"); < /code> Этот код довольно уродливый, поэтому я пытаюсь заменить его на макрос C ++. Идея заключается в использовании списка имен для автоматического генерации кода с помощью препроцессора, но я не могу представить, как это сделать.#define PARAM_LIST "a", "b", "c", "d" // lots of elements