【发布时间】:2016-04-10 15:30:13
【问题描述】:
在 Boost Python 模块中使用纯虚拟类的派生类时,我收到以下错误:
分配抽象类类型的对象
如果没有 Boost Python 模块,则不会出现错误。在以下示例中(接近我的用例),会出现什么问题?我是否必须让 Python 知道Base 和Derived 之间的继承关系?
PythonMinimal.cpp
#include <boost/python.hpp>
#include <vector>
using namespace boost::python;
//Base class - pure virtual.
template<typename T>
class Base{
public:
virtual void foo() = 0;
};
//Derived class, inherites from Base.
template<typename T>
class Derived : public Base<T>{
public:
Derived(int a, int b){
//Do something.
}
void foo(){
//Do something else.
}
};
//Test class, uses instances of Derived stored in STL container of Base.
template<typename T>
class TestClass{
public:
std::vector< Base<T> > vec;
TestClass(int a, int b){
vec.push_back(Derived<T>(a, b));
}
void foo(){
vec.at(0).foo();
}
};
//Build python module.
BOOST_PYTHON_MODULE(cpuMLP){
class_< TestClass<float> >("TestClass", init<int, int>())
.def("foo", &TestClass<float>::foo);
};
CMakeLists.txt
#Set CMake Version and project name.
cmake_minimum_required(VERSION 2.8)
project(PythonMinimal)
#Attempt to find Python and Boost Python.
find_package(PythonInterp)
find_package(PythonLibs)
find_package(Boost COMPONENTS python)
#Find includes.
include_directories(${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS})
#Add library to project.
add_library(PythonMinimal SHARED PythonMinimal.cpp)
target_link_libraries(PythonMinimal ${Boost_LIBRARIES} ${PYTHON_LIBRARIES})
【问题讨论】:
标签: python c++ inheritance boost boost-python