首页 > 解决方案 > 有没有办法将输入类型包装到 C++ 中的模板类?

问题描述

长话短说,我写了一段代码,如下所示。这个片段包括一个两种类型的模板类。它的名字是Num。

#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();

当您输入要测试的类型作为 TYPED_TEST_CASE 宏时,我希望它可以在 google typed-test 中测试两个类型的类。

标签: c++templates

解决方案


如果您正是需要这种语法

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{}; 

或无数其他类似的方式。


推荐阅读