Есть ли способ обернуть типы ввода в шаблонный класс в C ++? - PullRequest
1 голос
/ 02 декабря 2019

Короче говоря, я написал фрагмент кода, как показано ниже. Этот фрагмент содержит шаблонный класс двух типов. И его зовут Нум.

#include <iostream>

using namespace std;

template <typename N, typename U>
class Num
{
public:
    Num(): num0(3), num1(4.56) 
    {
        cout << "This is number: " << num0 << endl;
        cout << "This is number: " << num1 << endl;
    }
private:
    N num0;
    U num1;
};

int main()
{

    Num<int, double> num();

    return 0;
}

Код работает нормально, но по какой-то причине мне нужно обернуть типы при передаче в экземпляр класса. Чтобы быть более понятным, вместо:

Num<int, double> num();

мне нужно что-то вроде этого:

Num<(int, double)> num();

Я хочу это для тестирования двухпечатного класса в google typed-testкогда вы вводите типы для проверки в качестве макроса TYPED_TEST_CASE.

1 Ответ

0 голосов
/ 02 декабря 2019

Если вам нужен именно этот синтаксис

Num<(int, double)> num();

нет, я не думаю, что это возможно.

Если вам нужно обернуть пару типов только в один, уверен: выМожно использовать std::tuple со специализацией

template <typename>
class Num;

template <typename N, typename U>
class Num<std::tuple<N, U>>
{
public:
    Num(): num0(3), num1(4.56) 
    {
        cout << "This is number: " << num0 << endl;
        cout << "This is number: " << num1 << endl;
    }
private:
    N num0;
    U num1;
};

// ...

Num<std::tuple<int, double>> num{}; 

или другими подобными способами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...