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 中,您的代码将被解析为包含位移>>运算符,然后整个 blobvector<shared_ptr<SomeClass>> vf=py::extract<vector<shared_ptr<SomeClass>>>可能会以某种方式被误认为是函数返回类型(现在=位于模板参数内,因此不表示复制初始化)。

于 2013-07-19T18:28:09.680 回答