#c #constructor #variadic-functions
#c #конструктор #переменная функция-функции
Вопрос:
Я хочу переменную функцию и копирую-вставляю эти параметры внутри кода, как в макросе. В макросе мы бы просто поместили __VA_ARGS__
туда, куда мы хотим, чтобы они были скопированы.
На самом деле, я хочу, чтобы эти параметры были значениями для переменных, которые затем будут помещены в объявление объекта (вызывающий конструктор с использованием этих значений).
Посмотрите:
struct Object {
std::string name;
int id;
Object(std::string name, int id) {
this->name = name;
this->id = id;
}
};
void create(...) {
Object object(VA_ARGS);
}
int main() {
create("Object1", 1);
}
Конечно, в этом коде на самом деле ничего не происходит, поскольку объект выходит за пределы области видимости, но это просто для того, чтобы показать, что я имею в виду.
Любой способ сделать это?
Комментарии:
1. Вы используете переменные аргументы в стиле c, которые представляют собой конструкцию времени выполнения, которая очень небезопасна в использовании и очень ограничена. Вы действительно должны предпочесть использовать для этого переменные шаблоны вместо переменных функций в стиле C. Не могли бы вы также объяснить, для чего вам это нужно? Ваш код показывает только один вызов
create
функции; это помогло бы увидеть больше примеров вызовов, которые вы хотите выполнить..
Ответ №1:
Правильный способ сделать это в C — использовать шаблоны переменных, которые представляют собой языковую конструкцию, позволяющую вам манипулировать пакетами параметров. Например.
template <typename... Ts>
Object createObject(Tsamp;amp;... xs)
{
return Object{std::forward<Ts>(xs)...};
}
createObject(1, 'a'); // as if `Object{1, 'a'}`