如何在不破坏现有应用程序的情况下更改 API 中 stl 容器的数据类型?
How to change data type of stl containers in API without breaking existing application?
我有一个基于库的c ++,其中许多API都有stl容器作为参数。而 stl 容器是 int 类型。喜欢
f1(std::vector<int> items)
f2(std::map<int, int> mp)
现在 int 类型需要更改为 long long int(64 位整数(。喜欢
f1(std::vector<long long int> items)
f2(std::map<long long int, int> mp)
已经基于该库开发了许多应用程序。如果我将 API 签名从 int 更改为长整型,则会破坏这些应用程序。由于有很多 API,我不想重载每个 API。
有没有办法在这些 API 中支持长整型,而不会破坏现有应用程序,也不使用函数重载?
是否可以创建一个包装类,该包装类将根据函数调用将自身隐式转换为 std::vector 或 std::vector?
问题是,如果你不希望现有的应用程序中断,你就不能要求它们更改代码。如果 API 内部需要 64 位整数,只需强制转换元素(或复制输入向量(,但由于传递的参数很可能是 32 位整数,因此long long
可以存储的其他信息无论如何都不存在。如果要有效地传递 64 位数据,则必须更改客户端代码。
编辑:如果较新的实现应该能够使用long long
,那么我建议重载是您的最佳选择。强制转换为vector<int>
将丢失信息,更改唯一方法的签名将破坏当前客户端。当有人调用旧变体时,您可以将单个元素转换为long long
。如果要存储整个向量,只需复制它即可。
我还建议通过(const(引用传递向量,您可以避免可能的大数据的不必要副本,并且不会破坏客户端,因为调用语法保持不变。
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 用于访问容器<T>数据成员的正确 API
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++MySQL C api用户输入行
- 在C应用程序中运行C++(带有STL)函数
- 使用2个键的cpp-stl::优先级队列排序不正确
- 如何使用 AWS Transcribe C++ API 中的'StartTranscriptionJobRequest'?
- 将std::string传递给WriteConsole API
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 在STL容器中使用模板类
- 在gtest.中使用fff.h模拟系统API
- 有没有任务栏API可以立即应用注册表更改
- 如何在不破坏现有应用程序的情况下更改 API 中 stl 容器的数据类型?
- 现代C++中STL API的差异(当我在VS2017中将目标从x64切换到x86时)
- 如何通过键和值以及在C 中的结果映射中比较两个地图?我们有任何STL API吗?
- 一个提升或 stl api,用于以 string=>array-index 的形式对字符串数组进行哈希处理
- 是与C STL兼容的C POSIX API
- 使用STL容器从c++中读取.mat文件的Matlab API
- Is C++ STL a C++ API?