C++ 是否可以通过模板指定抽象类变量类型?
在API上下文中,我希望最小化用户可用的类。为此,我想概括他可以访问的数据类型,但专门化输入数据 我想到了模板。但是,我来自C++世界,我不习惯C++世界中模板的可能性和限制。 下面是一些伪代码:C++ 是否可以通过模板指定抽象类变量类型?,c++,design-patterns,C++,Design Patterns,在API上下文中,我希望最小化用户可用的类。为此,我想概括他可以访问的数据类型,但专门化输入数据 我想到了模板。但是,我来自C++世界,我不习惯C++世界中模板的可能性和限制。 下面是一些伪代码: GenericAnimal<T> bool setSubSpecies(T.EnumOfSubSpecies subSpecies) GenericAnimal 布尔集合亚种(T.EnumOfSubSpecies亚种) GenericAnimal cod; 鳕鱼亚种(鱼、鱼亚种、鳕鱼)
GenericAnimal<T>
bool setSubSpecies(T.EnumOfSubSpecies subSpecies)
GenericAnimal
布尔集合亚种(T.EnumOfSubSpecies亚种)
GenericAnimal cod;
鳕鱼亚种(鱼、鱼亚种、鳕鱼);
普通鲸目动物;
鲸目动物亚种(哺乳动物亚种鲸目动物);
另一种方法是创建一个类Fish
,该类派生自GenericAnimal
,并使用适当的模板类,但正如我所说的,我希望避免大量的类,并通过一个独特的类/结构定义T1,T2,
编辑:代码输入错误更正。我不确定我是否完全理解你的问题,但这可能是你想要的吗
template <class T>
class GenericAnimal
{
public:
bool setSubSpecies(typename T::SubSpeciesEnum)
{
// code here
}
};
class Fish
{
public:
enum SubSpeciesEnum {
Cod, Salmon, Carp
};
};
class Mammal
{
public:
enum SubSpeciesEnum {
Cetaceans, Canids, Felines
};
};
GenericAnimal<Fish> cod;
cod.setSubSpecies(Fish::SubSpeciesEnum::Cod);
GenericAnimal<Mammal> cetaceans;
cod.setSubSpecies(Mammal::SubSpeciesEnum::Cetaceans);
subspecienum
是所有T的共同类吗?我希望类型依赖于T。Fish只会有与鱼类相关的亚种的枚举。@WebRoamer这不是所有鱼类共享的类型。与GenericAnimal
一起使用的每个T
必须包含一个名为subspecienum
的嵌套类型,但对于每个T
,它可以是不同的类型。我将扩大答案。是的,这就是我的意思,谢谢。还有一个问题:我们能让Fish类本身成为一个模板吗?它来自动物属性,T1是亚种?我尝试这样做,但是得到了一个关于标识符亚种数的C2061错误。
template <class T>
class GenericAnimal
{
public:
bool setSubSpecies(typename T::SubSpeciesEnum)
{
// code here
}
};
class Fish
{
public:
enum SubSpeciesEnum {
Cod, Salmon, Carp
};
};
class Mammal
{
public:
enum SubSpeciesEnum {
Cetaceans, Canids, Felines
};
};
GenericAnimal<Fish> cod;
cod.setSubSpecies(Fish::SubSpeciesEnum::Cod);
GenericAnimal<Mammal> cetaceans;
cod.setSubSpecies(Mammal::SubSpeciesEnum::Cetaceans);
class FishEnum
{
public:
enum SubSpeciesEnum {
Cod, Salmon, Carp
};
};
template <class EnumClass>
class AnimalAttributes : public EnumClass {
public:
using typename EnumClass::SubSpeciesEnum;
};
class Fish : public AnimalAttributes<FishEnum>
{
};