2012-06-12 18 views
0

我爲抽象基類編寫包裝類,基類有幾個純虛方法和一個重載運算符,如果我用重載運算符編譯我得到以下錯誤:Boost.Python包裝中的純虛擬重載運算符

cannot allocate an object of abstract type 

即使我實現我的包裝類的重載操作,莫名其妙的Boost.Python仍然堅持它不落實,任何線索?

這是我的代碼如下所示:

//abstract base class 
class Test 
{ 
    public: 
    virtual void start() = 0; 
    virtual void stop() = 0; 
    virtual bool operator==(const Test rhs) = 0; 
}; 

//wrapper class 
struct TestWrapper: Test, wrapper<Test> 
{ 
    public: 
    void start() 
    { 
     this->get_override("start")(); 
    } 
    void stop() 
    { 
     this->get_override("stop")(); 
    } 

    bool operator==(const Test& rhs) 
    { 
     return this->get_override("operator==")(rhs); 
    } 

}; 

//boost python module 
class_<TestWrapper, boost::noncopyable>("Test") 
    .def("start", pure_virtual(&Test::start)) 
    .def("stop", pure_virtual(&Test::stop)) 
    .def("operator==", pure_virtual(&Test::operator==)) 
; 

編輯:我什至不知道這是做正確的方式,我沒有見過任何像這樣的例子在文檔中。

回答

2

你有兩個不同的特徵:

class Test 
{ 
    public: 
    virtual void start() = 0; 
    virtual void stop() = 0; 
    virtual bool operator==(const Test rhs) = 0; // takes rhs by value 
}; 

在派生類中:

bool operator==(const Test& rhs) // takes rhs by reference 
{ 
    return this->get_override("operator==")(rhs); 
} 

所以你沒有真正實現純虛由底座,而是定義新功能。

+0

這是第一個問題,另一個是其中一個功能是一個常量成員,你讓我也意識到,所以非常感謝你:) – iabdalkader