具有相同底层实现的不同类型

问题描述 投票:0回答:1

我想创建不同的类型

A
B
C
。所有这三种类型共享相同的功能(它们的共同功能具有相同的实现),但这三种类型需要是不同的类型,以便在任何地方都不存在隐式转换。

到目前为止,我已经想到了以下内容,但所有这些要么不好,要么不能满足我的用例。

  1. 将通用功能放在基类中,并让这3个继承它们。但这三者本质上是同一类型。

  2. 复制实现 3 次,使 A、B 和 C 具有相同的类定义。但这绝对是一个糟糕的解决方案。

  3. 因为共享功能,我想到创建一个模板类。但该模板类的对象都是相同的,仅在模板类型上有所不同。任何人都可以创建具有相同类型名的新类型,但这最终会达不到目的。

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.
  1. 创建一个宏类并使用它来“复制”实现,但我不想使用宏,因为它们在调试中引入了麻烦。

是否有一种设计模式可以用来确保

A
B
C
具有相同的模板化实现,但仍然创建不同的类型。

我知道这听起来很愚蠢,但不幸的是,这是一个我一直坚持的奇怪用例。

谢谢你

c++ c++11 design-patterns
1个回答
0
投票

我建议你使用基类方法,但将继承设置为私有。然后,这种关系是“根据……实现”而不是“是一个”。

© www.soinside.com 2019 - 2024. All rights reserved.