声明...作为函数数组?

时间:2013-07-19 17:59:03

标签: parsing c++11

我正在编译一些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<>(...)()是一个有效的表达式 -

1 个答案:

答案 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>>>可能会被误认为函数返回类型(现在为= }在模板参数内,因此不表示复制初始化。