我希望定义两个具有相同代码的不同名称的库
I am looking to define two library with different names that use the same code
我有一个c++库,它有一个名为ExampleFunction()
的函数。此函数已记录在案,并且已在使用中。不幸的是,库的样式要求在{首字母为小写}exampleFunction()
调用此函数。
我需要保留旧名称以实现向后兼容性,但将新名称添加为公共函数。 最有效的方法是什么?
我假设添加以下定义:
void exampleFunction() {ExampleFunction();}
不是解决此问题的最佳方法,正在寻找选择。
我假设添加"void exampleFunction(( {exampleFunction((; return;} 的定义"不是解决这个问题的最佳方法
我建议不要假设这样的事情。这是解决这个问题的好方法。
我正在寻找选择。
另一种选择是使用函数引用(或者使用函数指针(:
auto& exampleFunction = ExampleFunction;
您可以将实际具有实现的现有函数重命名为exampleFunction()
,因为这是它应该的。然后,旧名称的用户 1( 仍然有工作代码,并且 2( 被告知有更新的函数名称可以使用,您可以这样做:
[[deprecated("Use exampleFunction() instead")]]
inline void ExampleFunction() { exampleFunction(); }
这将使用 C++14 及更高版本的deprecated
属性。包装器函数的性能影响要么不存在(如果确实由编译器内联(要么可以忽略不计。
作为其他答案的替代方案,您可以使用可变参数模板、完美的转发和decltype(auto)
。
template<typename ...Args>
[[deprecated("use exampleFunction")]] decltype(auto) ExampleFunction(Args &&...args)
{
return exampleFunction(std::forward<Args>(args)...);
}
您可以定义一个宏来声明这些函数:
#define def_deprecated_func(old_name, new_name)
template<typename ...Args>
[[deprecated("use " #new_name)]] decltype(auto) old_name(Args &&...args)
{
return new_name(std::forward<Args>(args)...);
}
// ...
def_deprecated_func(ExampleFunction, exampleFunction)
编译错误对于已弃用的函数来说不是很好,但是由于您不应该首先使用它们,因此这并不是真正的妥协。
请注意,这需要您将原始函数从ExampleFunction
重命名为exampleFunction
。
相关文章:
- 此代码是否违反一个定义规则
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 我无法在 qt 的C++代码中定义字符串
- 这个c++代码是如何在没有定义函数的情况下运行的
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- Xcode 语义问题引用或以前定义的代码
- 我希望定义两个具有相同代码的不同名称的库
- 如何定义一个没有重复代码的继承的 const 类成员函数?
- Arduino:在 loop() 和自定义函数中运行相同的代码时出现问题
- 我应该C++自定义异常代码放在哪里?
- 更改 git 分支名称后,在项目的 Visual Studio 代码中丢失智能感知(建议,转到定义C++
- 为什么我的C++代码无法编译,出现未定义的引用错误
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 用于C++代码的 API 监视器类型定义 (XML)
- 我的代码中C++未定义的引用错误?
- 是 VS 代码 MinGW 与 Win32 中未定义的错误
- 为什么通过定义另一个指针单元格,整个代码停止工作?
- 可以在没有构建代码的情况下转到定义吗?
- 无法使用类属性代码定义编译 c++
- 这段代码定义良好吗?