长话短说,我已经写了下面的一段代码。此代码片段包括两种类型的模板类。它的名字叫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中测试两种类型的类。
答案 0 :(得分:0)
如果您确实需要此语法
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{};
或数不胜数的其他类似方式。
答案 1 :(得分:0)
您可以将其作为函数类型传递,例如void (int, double)
,然后从那里提取类型:
// ...
template<typename T>
struct NumHelper;
template<typename N, typename U>
struct NumHelper<void (N, U)>
{ using type = Num<N, U>; };
template<typename T>
using NumHelperT = typename NumHelperT<T>::type;
// ...
int main()
{
NumHelperT<void (int, double)> num{};
}
注意:请勿使用Num<int, double> num()
,因为它是函数声明。