Как специализировать функции шаблона?
Как переопределить функции специализации шаблона?
Я строю матрицу 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 ответа
Может быть, с помощью удаления?
class A
{
public:
A(){;};
int some_function();
};
class B: public A
{
public:
B():A(){;};
int some_function() = delete;
};
Это решение не является полностью общим, но работает для определенного типа данных:
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;
}