模板的模板功能如何专门化?

时间:2019-01-15 22:00:15

标签: c++ templates operator-overloading partial-specialization

如何覆盖模板的模板专业化功能?

我正在从向量的向量中构建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>>实例将无法使用)。

2 个答案:

答案 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;
}