sim*_*ont 6 c++ api deprecated
当返回类型需要更改时,有哪些策略可以弃用函数?例如,我有:
BadObject foo(int); // Old function: BadObject is being removed.
Object foo(int); // New function.
Run Code Online (Sandbox Code Playgroud)
Object
并且BadObject
在内部非常不同,并且交换它们的返回类型将破坏我的库的当前用户的代码.我的目标是避免这种情况.
我可以标记为BadObject foo(int)
已弃用,并让用户有时间更改受影响的代码.
但是,我不能foo
基于return-type 重载.foo
命名非常好,不需要额外的参数.如何在保持旧版本的同时将新功能添加到我的库中,至少有一段时间?
在不破坏过多依赖代码的情况下弃用旧函数的策略是什么,同时为用户提供迁移到新版本的时间?理想情况下,我会保留当前的函数名称和参数列表,因为它现在命名得很好.感觉这应该是一个相当普遍的问题:什么是解决它的好方法?
虽然该解决方案将迫使您更改函数名称,但这将是您的老用户和新用户之间的妥协。
所以 - 将旧的重命名foo
为deprecatedFoo
,将新的foo
重命名为foo2
(或任何你想要的)。然后,在库中包含的头文件中,您可以简单地:
#define deprecatedFoo foo
Run Code Online (Sandbox Code Playgroud)
并在函数本身内部执行以下操作:
#warning ("This function is deprecated. Use 'foo2' or change the #define in LINE in file HEADER.")
Run Code Online (Sandbox Code Playgroud)
旧版本的用户不必更改代码,并且会收到警告,新用户可能会听取并更改代码#define
以便使用新版本foo
。
在下一个版本中,您只需删除旧的foo
和define
.