Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何专门化模板的模板功能?_C++_Templates_Operator Overloading_Partial Specialization - Fatal编程技术网

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

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实例将能够使

如何覆盖模板的模板专门化功能

我正在用向量的向量构建一个c++11矩阵。我已经实现了向量(不能使用
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;
}