C ++: оболочка класса с использованием шаблонов variadi c - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу сделать обертку для другого класса ob js. Когда объект-оболочка инициализирован, я хочу иметь возможность передать его конструктору параметры, которые я хочу передать внутреннему объекту:

template <class U, class... Args> struct T {
    T(Args... args) {
        data = new U(args...);
    }
    U* data;
};

Я сделал пустышку Obj:

struct Obj {
    Obj(int a, int b) {
        this->a = a;
        this->b = b;
    }
    int a;
    int b;
};

Теперь вместо того, чтобы использовать Obj obj(1, 2) для его инициализации, я хочу использовать оболочку, как я бы занимался некоторыми вычислениями и управлением. Итак, чего я пытаюсь достичь:

T<Obj> obj(1, 2); // doesn't work, this is what I want to achieve
T<Obj, int, int> obj(1, 2); // works, but it's not what I want it to look like

1 Ответ

1 голос
/ 18 апреля 2020

class... Args должен быть параметром шаблона конструктора, а не всего класса. Также вы должны использовать совершенную пересылку здесь, даже если это не имеет значения для struct Obj.

template <class U>
struct T
{
    template <class ...Args>
    T(Args &&... args)
    {
        data = new U(std::forward<Args>(args)...);
    }
    U *data;
};
...