我正在编译一些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<>(...)()
是一个有效的表达式 -
答案 0 :(得分: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>>>
可能会被误认为函数返回类型(现在为=
}在模板参数内,因此不表示复制初始化。