Как специализировать функции шаблона? - PullRequest
0 голосов
/ 16 января 2019

Как переопределить функции специализации шаблона шаблона?

Я строю матрицу 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 голосов
/ 16 января 2019

Это решение не является универсальным, но работает для определенного типа данных:

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;
}
0 голосов
/ 16 января 2019

Может быть, с помощью удаления?

class A
{
    public:
    A(){;};
    int some_function();
};

class B: public A
{
    public:
    B():A(){;};
    int some_function() = delete;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...