将stl容器传递给C函数的准则

时间:2017-01-11 17:07:24

标签: c++ c stl

我们正在使用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函数中的访问器兼容的数据结构的简单方法是什么?

1 个答案:

答案 0 :(得分:-1)

更好的解决方案是更改linklactive的接口以获取指针和长度,而不是假设终结符。 (如果必须保持find_best_footype的C兼容性)

然后你可以写:

find_best_footype

而不必更改矢量。但是,这需要在其他地方进行更改。