假设有一个接口规范“X”。X 要求调用XHeader.h
一个结构X_Fiddle
来保证成员的存在foo
和bar
,两者都是 type int
。然而,实现定义的成员并没有被禁止,如果这样做可以提高效率,实际上是被鼓励的。我需要为我工作的公司编写 X 的实现,并意识到有一些特定于我的实现的成员来存储一些状态会非常方便,所以我写了以下内容:
typedef struct X_Fiddle {
int foo; /* Guaranteed by spec */
int bar; /* Guaranteed by spec */
size_t dinky_dingbat; /* IMPLEMENTATION-SPECIFIC, DO NOT USE */
unsigned char *dingbat_data; /* IMPLEMENTATION-SPECIFIC, DO NOT USE */
} X_Fiddle;
当然,没有什么可以告诉用户dinky_dingbat
或者dingbat_data
不应该使用的,因为它们是特定于实现的细节,并且可能在未来的某个时候改变或消失。鉴于我无法通过使用不透明指针之类的东西来隐藏实现,我应该怎么做才能使这些内部成员脱颖而出(或其他技巧来隐藏这些东西)?是否有任何常用/标准的方法来处理此类问题?我能想到的最好的方法是使用前导下划线之类的命名约定,但我不确定前导下划线规则是否适用于成员变量,而且我感觉我也混淆了一些 C++ 特定规则。我还想过将它们命名为类似的名称,INTERNAL_dinky_dingbat
或者为内部包含的内部类型设置一个单独的结构X_Fiddle
,但我想尽量减少额外的输入,所以我有点不喜欢它们。或者仅仅拥有一个如上所述的普通结构是否完全可以接受,其中特定于实现的细节在评论和文档中详细说明,当我需要改变事情时,让经验不足和勤奋的人遭受他们自己造成的伤害?
假设我是从头开始和/或我的公司/团队对这种特定情况没有约定。