返回类型更改c ++时如何弃用函数

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命名非常好,不需要额外的参数.如何在保持旧版本的同时将新功能添加到我的库中,至少有一段时间?

在不破坏过多依赖代码的情况下弃用旧函数的策略是什么,同时为用户提供迁移到新版本的时间?理想情况下,我会保留当前的函数名称和参数列表,因为它现在命名得很好.感觉这应该是一个相当普遍的问题:什么是解决它的好方法?

Paw*_*arz 4

虽然该解决方案迫使您更改函数名称,但这将是您的老用户和新用户之间的妥协。

所以 - 将旧的重命名foodeprecatedFoo,将新的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

在下一个版本中,您只需删除旧的foodefine.