Bài toán
Tôi có một lớp mẫu trong C++ có phương pháp tĩnh. Có vẻ ít nhiều giống như thế này:Phương pháp tĩnh Cython C++ trong một lớp mẫu
template<typename T>
class Foo {
static std::shared_ptr<Foo<T>> doSth();
}
vì vậy trong C++ bạn gọi nó là: Foo<Int>::doSth();
. Tuy nhiên, trong Cython, cách gọi phương thức tĩnh là sử dụng tên lớp như một không gian tên:
cdef extern from "Bar.h" namespace "Bar":
shared_ptr[Bar] doSth() # assuming shared_ptr is already declared
nhưng điều này không có khái niệm về mẫu. Rõ ràng, chỉ cần đi qua Foo<T>
như một namespace không hoạt động, bởi vì nó dịch để Foo<T>::doStr()
trong C++, không có loại bê tông được thay thế cho T.
Câu hỏi
Làm thế nào bạn sẽ làm điều đó trong Cython? Có cách nào hay giải pháp khác?
nên không làm việc này như đã giải thích cho các phương pháp không tĩnh trong tài liệu? http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html#templates –
Thật không may là không. Viết 'cdef extern từ không gian tên" Foo.h "" Foo ": shared_ptr [Foo [T]] doSth [T]()' cũng không hoạt động. Đó là bởi vì cython tạo ra mã C++ như: 'Foo :: doSth();' - tham số mẫu sau khi Foo bị thiếu. –
piotrMocz