3

この質問は、砂時計パターンに関するステファヌス デュ トワの講演に関連しています。すばらしい話で、図書館のライターにとって本当に役に立ちます。

YouTube リンク: https://youtu.be/PVYdHDm0q6Y

Slideshare リンク: http://www.slideshare.net/StefanusDuToit/cpp-con-2014-hourglass-interfaces-for-c-apis

わかりましたここに質問があります:

std::vector<MyObject>ライブラリの境界を越えてa を渡す必要があるとします。砂時計パターンを使用してこれを行う最善の方法は何ですか。パフォーマンスだけでなく、きれいなインターフェースを維持することも心配しています。以下に、実装したいインターフェースの例を示します。

クライアント側 C++ インターフェイス:

void MyLibraryClass::DoSomething(const std::vector<MyObject>& objs);

C インターフェイス:

???? (Not sure what is the best practice here)

内部ライブラリ C++ インターフェイス:

MyInternalLibraryClass::DoSomething(const std::vector<MyObjectImpl>& objs);

これで私の質問が説明されることを願っています。

4

1 に答える 1

0

配列を内部的に渡すのが最善です:

void do_something(MyObject* array, size_t count);

内部クラスはstd::span、そのインターフェイスでのようなものを使用します。ベクトルを変更していないため、より柔軟になり、それほど多くのコード変更を必要としません。

于 2019-10-16T14:06:27.733 に答える