我想创建不同的类型
A
、B
和 C
。所有这三种类型共享相同的功能(它们的共同功能具有相同的实现),但这三种类型需要是不同的类型,以便在任何地方都不存在隐式转换。
到目前为止,我已经想到了以下内容,但所有这些要么不好,要么不能满足我的用例。
将通用功能放在基类中,并让这3个继承它们。但这三者本质上是同一类型。
复制实现 3 次,使 A、B 和 C 具有相同的类定义。但这绝对是一个糟糕的解决方案。
因为共享功能,我想到创建一个模板类。但该模板类的对象都是相同的,仅在模板类型上有所不同。任何人都可以创建具有相同类型名的新类型,但这最终会达不到目的。
template <typename T>
class TemplatedClass{
public:
TemplatedClass(T val) {.....}
};
using A = TemplatedClass<type1>;
using B = TemplatedClass<type2>;
using RogueType = TemplatedClass<type1>;;
// now A and RogueType are just aliases instead of being different types.
是否有一种设计模式可以用来确保
A
、B
和 C
具有相同的模板化实现,但仍然创建不同的类型。
我知道这听起来很愚蠢,但不幸的是,这是一个我一直坚持的奇怪用例。
谢谢你
我建议你使用基类方法,但将继承设置为私有。然后,这种关系是“根据……实现”而不是“是一个”。