编写此代码的目的是为了更好地理解部分模板的专业化。我正在尝试使用三个不同的布尔值来部分专门化Vector类。
我有一个枚举(对于我的bool)定义为:
enum MY_BOOL
{
YES,
NO,
MAYBE
};
对于我的主模板类,
template<class A,MY_BOOL,class B>
class Vector{};
我的部分专业课是
template<MY_BOOL b>
class Vector<A,YES,B>{};
编译器抱怨A
和B
是未声明的标识符,而部分专用的Vector
的参数太少。不要抱怨'YES'这使我感到困惑,因为A
和B
已经在主模板类中定义了。我不需要将它们放回部分专用类的参数列表中,因为该参数列表的目的是仅包含我要专用的变量。
答案 0 :(得分:1)
在
template<MY_BOOL b>
class Vector<A,YES,B>{};
由于未指定A
和B
,因此会出现编译器错误。它不会使用主模板中的A
和B
,它将仅使用专业化中定义的类型/值。
由于您希望对每个枚举值进行专业化处理,因此可以像这样
template<class A,MY_BOOL,class B>
class Vector {};
template<class A, class B>
class Vector<A, YES, B>{ /* YES stuff */ };
template<class A, class B>
class Vector<A, NO, B>{ /* NO stuff */ };
template<class A, class B>
class Vector<A, MAYBE, B>{ /* MAYBE stuff */ };
现在您对每个枚举都有一个专门化的内容。
答案 1 :(得分:0)
对YES的部分专业化应为:
scala> val df = sc.parallelize(Array((1, 2), (3, 4),(3, 4), (1, 6))).toDF("no", "age")
scala> df.show
+---+---+
| no|age|
+---+---+
| 1| 2|
| 3| 4|
| 3| 4|
| 1| 6|
+---+---+
scala> df.dropDuplicates().show()
+---+---+
| no|age|
+---+---+
| 1| 2|
| 3| 4|
| 1| 6|
+---+---+
部分专业化的含义是,您提供的模板参数与基本模板不同,并自己填写基本模板的缺失模板参数。