我无法弄清楚我的代码无法编译的原因
#include <iostream>
#include <sstream>
#include <boost/python/module.hpp>
#include <boost/python/class.hpp>
namespace bp = boost::python;
template<std::size_t Tsize>
class MyClass
{
public:
MyClass()
{}
~MyClass()
{}
template<typename data_t>
void Sum(data_t* result, const data_t* v1, const data_t* v2)
{
for(std::size_t i = 0; i < Tsize; ++i)
result[i] = v1[i] + v2[i];
}
};
template<std::size_t Tsize>
void AddMyClass()
{
typedef MyClass<Tsize> MyClassType;
std::stringstream ss;
ss << "MyClass" << Tsize;
bp::class_<MyClassType, boost::noncopyable>
(ss.str().c_str(), bp::init<>())
.def("SumInt", &MyClassType::Sum<int>)
.def("SumDouble", &MyClassType::Sum<double>)
;
}
BOOST_PYTHON_MODULE(myclass)
{
AddMyClass<1>();
AddMyClass<2>();
AddMyClass<3>();
AddMyClass<4>();
AddMyClass<5>();
}
编译器抛出错误
error: expected primary-expression before ‘int’
error: expected primary-expression before ‘double’
删除AddMyClass的模板参数会删除错误,但会使代码更长,因为必须导出每种类型的MyClass。
任何人都知道如何解决此错误?
答案 0 :(得分:4)
缺少template
关键字:
.def("SumInt", &MyClassType::template Sum<int>)
.def("SumDouble", &MyClassType::template Sum<double>)