gpt4 book ai didi

c++ - 导出模板类的模板函数

转载 作者:行者123 更新时间:2023-11-27 22:44:41 25 4
gpt4 key购买 nike

我想不通我下面的代码无法编译的原因

#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 都必须导出。

有人知道如何解决这个错误吗?

最佳答案

缺少 template 关键字:

.def("SumInt", &MyClassType::template Sum<int>)
.def("SumDouble", &MyClassType::template Sum<double>)

关于c++ - 导出模板类的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44566468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com