2012-01-03 40 views
7

Tôi đang cố gắng bọc một số Mã C++ với Cython. Tôi có một lớp sử dụng một phương thức mẫu, nhưng không phải là một bản mẫu.Chức năng/phương thức gói C++ trong Cython

class SomeClass { 
    template <class T> SomeClass(T& spam); 
}; 

Vì lớp này không phải là mẫu mà chỉ là Trình xây dựng, tôi không thể khai báo lớp là mẫu trong Cython như thế này.

# wrong! 
cdef extern from "SomeClass.h": 
    cppclass SomeClass [T]: 
     SomeClass(T& spam) 

Làm cách nào để bọc mẫu?

+0

Hỗ trợ của Cython cho C++ vẫn còn rất hạn chế, vì vậy rất có thể, bạn không thể. Tôi không biết chắc chắn, mặc dù. Một workaround mà đến với tâm là xác định quá tải cho các loại bạn thực sự sử dụng constructor này với. –

Trả lời

0

Dễ dàng. (Hoặc tôi nghĩ rằng nó là) Trong lớp C++, thành viên là templated, trong khi trong Cython, bạn khai báo lớp được templated. Thay đổi mã của bạn, hoặc đến:

template <class T> 
class SomeClass { 
    SomeClass(T& spam); 
}; 

Nếu khả thi, hoặc:

cdef extern from "SomeClass.h": 
    cppclass SomeClass: 
     SomeClass [T](T& spam) 

Nếu Cython hỗ trợ nó.

Tôi không phải là chuyên gia về cython, vì vậy có thể tôi đã sai.

+0

Cái cũ không khả thi/tương đương, và cái sau không hoạt động như được trình bày. (Sẽ rất thú vị nếu biết có hỗ trợ hoặc giải pháp nào đó.) –

+0

Kể từ phiên bản 0.19, tài liệu chỉ đề cập đến các lớp mẫu, không phải là các phương thức mẫu. http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html –

+2

Theo [this] (http: //docs.cython.org/src/userguide/wrapping_CPlusPlus.html # what-s-new-in-cython-v0-13-about-c), các phương thức mẫu dường như không được hỗ trợ, chỉ các mẫu calsses – maxywb

0

Trình bao bọc Boost cho cython như thế nào?

http://www.boost.org/doc/libs/1_54_0/libs/python/doc/index.html

Chào mừng bạn đến phiên bản 2 của Boost.Python, một thư viện C++ cho phép khả năng tương tác liền mạch giữa C++ và ngôn ngữ lập trình Python. Phiên bản mới đã được viết lại từ mặt đất lên, với một thuận tiện hơn và giao diện linh hoạt, và nhiều tính năng mới, bao gồm hỗ trợ cho: Tài liệu tham khảo và Pointers toàn cầu đăng ký Loại Coercions tự động Cross-đun Loại Chuyển đổi Chức năng hiệu quả quá tải C++ để Python Exception dịch Mặc định Arguments Arguments từ khóa thao tác Python đối tượng trong Xuất C++ Vòng lặp như Python Vòng lặp Strings Documentation

tôi đoán bạn đang tìm kiếm một cái gì đó như thế này, nó đã có như một phần của tăng C++ thư viện C++

+0

Tôi không chắc chắn bạn đang cố nói. –

0

Đối với một tổ chức phi constructor mẫu phương pháp, sử dụng sau đây không mẫu lớp:

class SomeClass { 
    template <class T> void other(T& spam); 
}; 

tôi đã có thể có được điều này để làm việc:

cdef extern from "someclass.h": 
    cppclass SomeClass: 
     void other[T](T &spam) 

đó có thể không giúp bạn nếu bạn cụ thể cần một phương thức tạo mẫu, nhưng có vẻ như sự hỗ trợ của Cython đối với các phương thức mẫu đã được cải thiện ít nhất kể từ thời điểm câu hỏi này ban đầu được yêu cầu.