Функция Variadic и скопировать эти параметры (как мы можем в макросе) - PullRequest
0 голосов
/ 18 апреля 2019

Я хочу использовать функцию с переменным значением и скопировать эти параметры в код, как в макросе.В макросе мы просто поместили бы __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 Ответ

4 голосов
/ 18 апреля 2019

Правильный способ сделать это в C ++ - использовать шаблоны переменных , которые являются языковой конструкцией, позволяющей манипулировать пакетами параметров.Например,

template <typename... Ts>
Object createObject(Ts&&... xs)
{
    return Object{std::forward<Ts>(xs)...};
}

createObject(1, 'a'); // as if `Object{1, 'a'}`
...