gpt4 book ai didi

c++ - 专门用于指针的模板

转载 作者:行者123 更新时间:2023-11-30 02:57:14 24 4
gpt4 key购买 nike

我想专门设计一个模板类,使其对 Base 类型的指针和所有其他指针类型的行为有所不同。我尝试使用 enable if。但它没有按照我想要的方式工作。谁能告诉我该怎么做。我试过的代码:

class Base
{
};

class Derived:public Base
{
};

class Non_base
{
};

template<class T,class Enable=void> class Vector
{
public:
Vector()
{
cout<<"Constructor of Vector "<<endl;
}
};



template<class T> class Vector<T*>
{
public:
Vector()
{
cout<<"Constructor of Vector<T *> "<<endl;
}
};



template<> class Vector<Base*>
{
public:
Vector()
{
cout<<"Constructor of Vector<Base*> fully specialized"<<endl;
}
};


//template<class T> class Vector<T *>:public Vector<Base *>
//{
//public:
// Vector()
// {
// cout<<"Constructor of Vector<Base*> partially specilized"<<endl;
// }
//};


template<class T> class Vector<T*,typename enable_if<is_base_of<Base,T>::value>::type>
{
Vector()
{
cout<<"Constructor of Vector<Base*> partially specilized"<<endl;
}
};

最佳答案

当您添加 enable_if 时现有重载集的子集,通常还需要将其添加到其余成员。当启用某些重载时,必须禁用其他重载,否则会出现歧义。

template<class T> class Vector<T*,typename enable_if<!is_base_of<Base,T>::value>::type>
{
public:
Vector()
{
cout<<"Constructor of Vector<T *> "<<endl;
}
};

您不需要添加 enable_if<!…>完全特化,因为它已经是集合中的最佳匹配,所以不会有歧义。

关于c++ - 专门用于指针的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14806114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com