我们正在使用stl容器迁移到现代c ++。但是具有班级风格的旧c仍然存在。最重要的重构领域之一是C api的接口。
// foo_types_list (array terminated by FOO_TYPE_NONE)
enum FooTypes find_best_footype(const enum FooTypes *foo_types_list,
unsigned int capabilities);
std::vector<FooTypes> myFooTypes{ FOO_TYPE_A, FOO_TYPE_ZZ, FOO_TYPE_B };
FooTypes foo = find_best_footype( &myFooTypes.front(), 42); // fail, not terminated.
适应这些c-api的最佳策略是什么?我需要终止向量来进行调用,但我不想创建不必要的突变或副本?
如果创建副本是唯一的方法,那么制作一个与C函数中的访问器兼容的数据结构的简单方法是什么?
答案 0 :(得分:-1)
更好的解决方案是更改linklactive
的接口以获取指针和长度,而不是假设终结符。
(如果必须保持find_best_footype
的C兼容性)
然后你可以写:
find_best_footype
而不必更改矢量。但是,这需要在其他地方进行更改。