大佬教程收集整理的这篇文章主要介绍了模板类中的Cython C静态方法,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在C中有一个模板类,它有一个静态方法.它看起来或多或少是这样的:
template<typename T> class Foo { static std::shared_ptr<Foo<T>> doSth(); }
所以在C中你会称之为:Foo< Int> :: doSth();.但是在Cython中,调用静态方法的方式是使用classname作为命名空间:
cdef extern from "Bar.h" namespace "Bar": shared_ptr[Bar] doSth() # assuming shared_ptr is already declared
但这没有模板的概念.显然,简单地通过Foo< T>因为命名空间不起作用,因为它在C中转换为Foo< T> :: dostr(),没有具体的类型被替换为T.
题
你如何在Cython中做到这一点?有办法还是解决办法?
我不认为你可以直接在Cython中做.您可以创建一个非常薄的包装器(非静态方法)c模板函数
template <typename T> std::shared_ptr<Foo<T>> foo_T_doSth<T>() { return Foo<T>::doSth(); }
然后将该方法包装在Cython中
cdef extern from "..." shared_ptr[T] foo_T_doSth[T]()
除此之外,推荐的方法是在Cython中包装静态方法(从https://groups.google.com/forum/#!topic/cython-users/xaErUq2yY0s开始)
cdef extern from "...": cdef foo_doSth "Foo::doSth"() # not declared as a memeber
以上是大佬教程为你收集整理的模板类中的Cython C静态方法全部内容,希望文章能够帮你解决模板类中的Cython C静态方法所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。