gpt4 book ai didi

c++ - 类层次结构的模板类?

转载 作者:太空宇宙 更新时间:2023-11-04 15:43:59 25 4
gpt4 key购买 nike

有没有一种方法可以定义一个模板类,该模板类只能与来自特定类层次结构的派生类一起使用?

假设我有 Animal 基类

class Animal{
public:
virtual ~Animal();
virtual void shout() = 0;
};

和Dog、Cat、Tiger都是派生类

class Dog : public Animal{
public:
virtual void shout(){
cout<<"Bark";
}
}
class Cat : public Animal{
public:
virtual void shout()
{
cout<<"Meow";
}
}

我需要定义一个模板类,比如“AnimalTemplate”,它只能与 Animal 的派生类一起使用,所以如果我尝试做“AnimalTemplate< Duck >”,我应该会遇到编译错误(或一些错误),即使 Duck 中定义了方法 shout() 。(这个问题主要是让我了解是否可以将 OO 范式与泛型编程混合使用)

最佳答案

我会立即想到两种形式:

SFINAE

template<typename T, 
typename = typename std::enable_if<std::is_base_of<Animal,T>::value>::type>
class AnimalTemplate
{
public:
AnimalTemplate() {}
};

static_assert

template<typename T>
class AnimalTemplate
{
public:
static_assert(std::is_base_of<Animal,T>::value, "T must be derived from Animal");
AnimalTemplate() {}
};

显然,后者更友好地告诉您失败的原因。

关于c++ - 类层次结构的模板类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19646676/

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