导出c++多态函数的一种聪明方法boost.python

2024-10-02 20:36:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个高度多态的c++函数,可以用将近20种不同的类型调用。在

为了向python公开它,我做了如下操作:

#include originalFunctionNamespace.hpp

template<class T>
    T foo(T x)
    {
        return orignalFunctionNamespace::foo(x);
    }

但是,要从python调用它们,我必须用它们支持的每种类型专门化函数:

^{pr2}$

这是可行的,但我不能停止思考,必须有一个更聪明的方法来做到这一点。因为我要做很多功能,所以事情变得越来越大,重复性也越来越大。 有什么建议吗?在


Tags: 方法函数类型return高度fooincludetemplate
1条回答
网友
1楼 · 发布于 2024-10-02 20:36:46

在我看来,这可能是排字魔术的一个用途。在

如果你使用(或可以使用)新的C++ 0x标准,你可以写下这样的东西:

template <typename ArgType>
void def_foo_overloads()
{
    def("foo", foo<ArgType>);
    // last type in list
}
template <typename ArgType, typename... MoreArgTypes>
void def_foo_overloads()
{
    def("foo", foo<ArgType>);
    def_foo_overloads(MoreArgTypes...);
}

// use it like:
def_foo_overloads<orignalFunctionNamespace::type1,
                  orignalFunctionNamespace::type2,
                  ...
                  orignalFunctionNamespace::typeN> ();

如果您没有访问新标准的权限,您可以使用旧的递归类型列表执行相同的操作。在

相关问题 更多 >