0

私はいくつかのboost::pythonコードをコンパイルしていますが、このエラーを理解していません:

namespace py=boost::python;
void func(py::tuple& t){
   /* ... */
   vector<shared_ptr<SomeClass>> vf=py::extract<vector<shared_ptr<SomeClass>>>(t[0])();
   /* ... */
}

gcc 4.7 の場合-std=gnu++0x:

error: declaration of 't' as array of functions

同じことを書く正しい方法は何ですか?py::extract<>(...)()は有効な式です --

4

1 に答える 1

0

テンプレート終了ブラケットを空白で区切ってみてください:

vector<shared_ptr<SomeClass> > vf=py::extract<vector<shared_ptr<SomeClass> > >(t[0])();
//                          ^                                             ^ ^

C++11 ではこれが修正されていますが、コンパイラのバージョンに修正があるかどうかはわかりません。

C++03 では、コードは bitshift>>演算子を含むものとして解析され、blob 全体vector<shared_ptr<SomeClass>> vf=py::extract<vector<shared_ptr<SomeClass>>>が何らかの形で関数の戻り値の型と間違えられる可能性があります (現在、=はテンプレート引数内にあるため、コピー初期化を示しません)。

于 2013-07-19T18:28:09.680 に答える