类似但不兼容的类
Similar but incompatible classes
对于以下问题(在C++中),什么是好的实践?
我想实现两个(以及以后的更多)类,它们非常相似,但应该是不兼容的。例如,我将它们命名为class Apple
和class Orange
。显然,它们有共同的特性,比如物种、年龄、位置等等,但苹果对象永远不应该被指定给橙色变量。
更重要的是:应该有成员函数接受(或返回)自己的类,而不是其他类。例如,类Apple将具有:Apple[] getAllFromTheSameTree();
,类Orange将具有:Orange[] getAllFromTheSameTree();
,还有类似于void addToSameTree(Apple)
等的内容,考虑到苹果不能与桔子在同一棵树上。
一个想法是有一个抽象的根类(class Fruit
)来定义公共属性。但这将允许函数接受Fruit
类型的参数,如果可能的话,我想禁止它)。
另一个想法是模板:Fruit<Apple>
和Fruit<Orange>
(Apple和Orange在这里是一些伪空类型)。
一个想法是有一个抽象根类(class Fruit),它将定义公共属性
是的,这就是我建议你的想法。
但这将允许函数接受Fruit类型参数,如果可能的话,我想禁止)。
好吧,这不是问题。因为是抽象的,所以不可能有Fruit
类型的对象
例如,具有此签名的函数:
void consume_fruit(Fruit& fruit)
将接受任何种类的水果(Apple
、Orange
)。由于Fruit
是抽象的,它不会仅仅因为Fruit
类型的对象不存在而接受Fruit
类型的对象。
相似性集合(例如std::vector<std::shared_ptr<Fruit>>
)将包含源自Fruit
(Apple
,Orange
)的类型的对象,但同样不可能存在Fruit
类型的对象。
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 字符类型转换不兼容
- Qt:如何使不兼容的发送方/接收方参数兼容?
- 视觉工作室 2017;启用 /permissive 时,类型 "const wchar_t *" 的参数与类型 "PWSTR" 的参数不兼容
- 使用不兼容的分配器复制分配无序列图
- 类型为 "int*" 的参数与 C++ 中错误类型"int**"参数不兼容
- 该对象具有与成员函数不兼容的类型限定符.为什么会出现此错误?
- 我正在尝试将表的地址传递给要在另一个函数中使用的指针,但得到不兼容的指针类型
- 为什么范围算法与 std 的迭代器不兼容?
- Winpcap Findalldevs const char * 与 char * 不兼容
- C++ 类型的参数与 void (__cdecl*)(void) 类型的参数不兼容,当调用 std::atexit()
- 将"std::string {aka std::basic_string}"赋值中的不兼容类型<char>
- 如何在C++中停止调用不兼容的方法?
- OPENCL 警告:不兼容的指针类型将'float __global[16]'传递给类型为 '__global float4 的参数 *
- 函数范围的静态变量如何导致与共享库中函数代码的未来使用不兼容
- 如何修复"方法的类型与 PInvoke 不兼容"
- C++不兼容的迭代器类型
- 编译器错误"在if语句中分配不兼容的类型"
- 程序无法编译:将 'int (*)[3][3]' 赋值为 'int [9][3][3]' 中的不兼容类型
- boost::mpl 不使用(甚至不兼容)std::p air 的原因是什么?