仅在实现中自动进行类型转换
Automatic type conversions in the implementation only
- 两类:
Processor
和Data
。 -
Data
表示用户可以传递给Processor
的公共方法的一些数据对象。 - 在内部,
Processor
需要使用基于Data
InternalData
类型。 - 我制作了从
Data
到InternalData
并返回Processor
内部的私有转换函数,以避免重复代码并本地化Data
的界面有一天会更改时所需的更改。 - 但我希望这些转换隐含在
Processor
而不是显式。 - 这些转换函数仅供
Processor
实现使用。
不应该从外部世界看到或访问。 -
InternalData
是一种库类型。我无法控制它,也无法修改其界面。
也就是说,我不能只向它们添加转换构造函数或转换运算符成员函数。
如果您愿意,可以将其视为内置类型。 - 我也不想将这些转换器放在类
Data
,因为这不是它的业务,它不应该知道Processor
内部将其转换为其他东西。
长话短说,我希望Processor
的实现知道如何隐式地在Data
和InternalData
之间进行类型转换,但除了Processor
之外,没有其他人能够做到这一点,甚至不知道它在Processor
的实现中完成。
有什么办法可以在C++中做到这一点吗?
我对解决方案的尝试
我的第一个尝试是在Data
内部制作转换构造函数和转换运算符,使它们private
,并使Processor
成为能够访问这些私有转换器的Data
friend
。但这比我想要的要多:它Processor
可以完全访问Data
的内部结构,这很糟糕。
然后我注意到这堆函数(转换器)一起构成了一种Data
接口,但这个接口应该只供Processor
使用。所以我做了一个抽象的基类InternalDataConversions
并在那里声明这些转换函数,如pure virtual
。我把这堂课变成了Processor
的friend
。然后,我创建了 Data
类以私下派生,并实现了这些转换器。这样Processor
可以在内部使用这个"转换接口",但它无法访问Data
内部的任何其他内容,这更好。
但缺点是,现在Data
类需要在其定义中指定一些它不应该关心的东西,并且不必要地使它依赖于InternalData
和InternalDataConversions
,这是丑陋的。
有什么更好的主意吗?
您可以在 InternalData
中提供转换成员函数。复制构造函数可以取Data
,转换运算符可以返回一个。
class InternalData
{
public:
InternalData(const Data & data);
operator Data() const;
};
据推测InternalData
Processor
是私有的,因此这不会使界面混乱。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 使用简单类型列表实现的指数编译时间.为什么
- C++中的双指针类型转换
- 逐位操作的隐式类型转换
- 模板中的类型转换
- 在 C++(和 C)中进行类型转换时明显不一致
- 字符类型转换不兼容
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- C++:用户定义的显式类型转换函数错误
- 将类指针类型转换为键时出错
- 通过引用传递参数时C++类型转换
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- C++显式类型转换(C 样式强制转换)的强制表示法和static_cast的多种解释
- C++无效的函数类型转换
- 实现从一个类到另一个类的类型转换
- 在C++中实现相关类型之间的自动类型转换的最佳方法是什么?
- 可以通过将defed类型转换为某个单词类型来实现“autoconst*const”
- 实现POD到自定义类类型转换
- 仅在实现中自动进行类型转换