如何在不创建空类的情况下避免"big"模板类的专用化?
How to avoid specialization for a "big" template class without creating an empty class?
给定以下条件:
template <typename T0,typename T1,typename T2 , typename T3 , typename T4>
class Tuple
{
private:
T0 v0;
T1 v1;
T2 v2;
T3 v3;
T4 v4;
public:
void f()
{
cout << v0 << "," << v1 << "," << v2 << "," << v3 << "," << v4 << endl;
}
};
我想创建一个只有两个int
-的分部类,那么我必须这样专门化:
class NullType { }; // create an empty class
template <typename T0, typename T1>
class Tuple<T0,T1,NullType,NullType,NullType >
{
private:
T0 v0;
T1 v1;
public:
void func()
{
cout << "i'm a specialization" << endl;
}
};
但这个实现需要我做:
Tuple<int,int,NullType,NullType,NullType> b;
所以这很难看:)
有没有另一种方法可以在不定义另一个(空)类的情况下实现部分专门化:Tuple<int,int> b1;
?
您可以将T2到T4设置为默认模板参数,并使用void
而不是空的NullType
类,例如:
template <typename T0,typename T1,typename T2=void , typename T3=void , typename T4=void> class Tuple { private:
T0 v0;
T1 v1;
T2 v2;
T3 v3;
T4 v4;
public:
void f()
{
cout << v0 << "," << v1 << "," << v2 << "," << v3 << "," << v4 << endl;
}
};
template <typename T0, typename T1> class Tuple<T0,T1,void,void,void > {
private:
T0 v0;
T1 v1;
public:
void func()
{
cout << "i'm a specialization" << endl;
} };
int main(int argc, char** argv) {
Tuple<int,int> myTuple;
myTuple.func();
return 0;
}
有关工作示例,请参见此处。
EDIT:或者,您可以将boost::tuple或std::tuble与C++11一起使用:)
如果您的编译器支持C++11模板别名,那么做起来很简单:
template <typename T, typename U>
using tuple2 = tuple<T,U,NullType,NullType,NullType>;
相关文章:
- .cpp和.h文件中的模板专用化声明
- 调用专用模板时出错"no matching function for call to [...]"
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 模板专用化(按容器):value_type
- 静态数据成员模板专用化的实例化点在哪里
- 如何计算Big-O表示法中的平均渐近运行时间
- 特征 3 类的模板专用化
- Visual Studio 2017 不允许我创建 C++ 专用模板
- 字符串化递归的"std::vector<std::vector<...>>"而不使用部分模板函数专用化
- 具有常量引用参数的函数模板专用化
- 使用其他模板的模板专用化
- 嵌套在循环中的两个循环的 big-O 表示法
- 使用专用显卡进行 OpenGL 渲染时帧速率较低
- 嵌套模板显式专用化
- 如何检查模板专用化是否是基本模板的子类?
- C++:部分模板专用化用例
- 通过依赖类型使用非类型模板参数的单类型模板参数类模板的部分专用化
- 使用对象的基类部分模板专用化对对象进行哈希处理::哈希
- 在 C++20 中是否不再允许在 std 中对程序定义类型的函数模板进行专用化?
- 如何在不创建空类的情况下避免"big"模板类的专用化?