C++ Как извлечь и использовать «вариативные» параметры шаблона и их типы? [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C++ Как извлечь и использовать «вариативные» параметры шаблона и их типы? [закрыто]

Сообщение Anonymous »

Как я могу извлечь и использовать типы, определенные в аргументах шаблона переменных класса C++, чтобы вместо определения нескольких дубликатов следующего класса, которые откладываются только на количество и типы параметров:
template
class SUTTestFixture1
{
public:
void SetUp(T1 expected, vector data)
{
_expected = expected;
_data = data;
}

protected:
SUT _sutObj;
vector _data;
T1 _expected;
};
template
class SUTTestFixture2
{
public:
void SetUp(T1 expected, T2 param, vector data)
{
_expected = expected;
_param = param;
_data = data;
}

protected:
SUT _sutObj;
vector _data;
T1 _expected;
T2 _param;
};

Я ожидаю, что смогу использовать только один класс с переменными аргументами шаблона:
template
class SUTTestFixture
{
public:
void SetUp(T... args)
{
_expected = args...[0];
_data = args...[1]; // expected ‘;’ before ‘...’ token
}

protected:
SUT _sutObj;
vector _data; // XXX
T... _expected; // error: expected unqualified-id before ‘...’ token
};

SUTTestFixture1 пример использования:
class TestFixture1 : public SUTTestFixture1, public testing::TestWithParam
{
public:
void SetUp() override
{
RangeTestFixture1::SetUp(get(GetParam()), get(GetParam()));
}
long Function1Test()
{
return _sutObj.Function1(_data);
}
};

SUTTestFixture2 пример использования:
class TestFixture2 : public SUTTestFixture2, public testing::TestWithParam
{
public:
void SetUp() override
{
RangeTestFixture2::SetUp(get(GetParam()), get(GetParam()), get(GetParam()));
}
size_t Function2Test()
{
return _sutObj.Function2(_param, _data);
}
};


Подробнее здесь: https://stackoverflow.com/questions/784 ... heir-types
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»