C++ 如何专门化模板的模板功能?
如何覆盖模板的模板专门化功能 我正在用向量的向量构建一个c++11矩阵。我已经实现了向量(不能使用C++ 如何专门化模板的模板功能?,c++,templates,operator-overloading,partial-specialization,C++,Templates,Operator Overloading,Partial Specialization,如何覆盖模板的模板专门化功能 我正在用向量的向量构建一个c++11矩阵。我已经实现了向量(不能使用std::vector),我希望矩阵继承自myVectormyVector工作正常,但是myVector有一些我想要覆盖(删除它们)的函数。我该怎么做 代码: 模板类myMatrix:公共myVector{ ... //标量乘法 myVector myVector::运算符*(常量T和标量)常量{…} } 我只想从myVector专门化中删除operator*函数(这样myVector实例将能够使
std::vector
),我希望矩阵继承自myVector
myVector
工作正常,但是myVector
有一些我想要覆盖(删除它们)的函数。我该怎么做
代码:
模板类myMatrix:公共myVector{
...
//标量乘法
myVector myVector::运算符*(常量T和标量)常量{…}
}
我只想从myVector
专门化中删除operator*
函数(这样myVector
实例将能够使用函数,但myVector
实例将不能使用函数)。是否可以使用delete
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;
}
模板
类向量{
公众:
虚空剂量测定法(){
printf(“通用向量模板”);
}
};
模板
类向量{
公众:
void DoSomething()=删除;
};
int main(int argc,const char*argv[]{
向量iv;
iv.DoSomething();//好的;
向量viv;
viv.DoSomething();//错误:尝试使用已删除的函数;
返回0;
}
改用聚合。矩阵不是向量。。确定。我懂了。你能测试一下删除虚拟单词吗?如果两个virtual
都被删除了,是的,它可以工作。问题是你总是可以调用基本实现:bt;t、 A::一些函数()但语法非常明确。你没事吧?
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;
}