如何覆盖模板的模板专业化功能?
我正在从向量的向量中构建c ++ 11矩阵。我已经实现了向量(不能使用std::vector
),并且我希望矩阵继承自myVector<myVector<T>>
。 myVector<T>
可以正常工作,但是myVector<myVector<T>>
有一些我想覆盖(删除它们)的功能。我该怎么办?
代码:
template <typename T> class myMatrix : public myVector<myVector<T>>{
...
//scalar multiplication
myVector<T> MyVector<T>::operator*(const T& scalar) const{...}
}
我只想从operator*
专业化中删除myVector<myVector<T>>
函数(以便myVector<int>
实例将能够使用函数,而myVector<myVector<int>>
实例将无法使用)。
答案 0 :(得分:1)
也许使用删除功能?
class A
{
public:
A(){;};
int some_function();
};
class B: public A
{
public:
B():A(){;};
int some_function() = delete;
};
答案 1 :(得分:0)
此解决方案并不完全通用,但适用于特定的数据类型:
template <class T>
class Vector {
public:
virtual void DoSomething () {
printf("general Vector template");
}
};
template<>
class Vector <Vector<int>> {
public:
void DoSomething () = delete;
};
int main(int argc, const char * argv[]) {
Vector<int> iv;
iv.DoSomething(); // OK;
Vector<Vector<int>> viv;
viv.DoSomething(); // ERROR: attempt to use a deleted function;
return 0;
}