【发布时间】:2011-07-04 09:45:25
【问题描述】:
我有一个高度多态的 c++ 函数,可以用近 20 种不同的类型调用。
为了将它暴露给 python,我正在做这样的事情:
#include originalFunctionNamespace.hpp
template<class T>
T foo(T x)
{
return orignalFunctionNamespace::foo(x);
}
但是要从 python 调用它们,我必须使用它们支持的每种类型来专门化函数:
BOOST_PYTHON_MODULE(module_foo)
{
def("foo", foo<orignalFunctionNamespace::type1>);
def("foo", foo<orignalFunctionNamespace::type2>);
def("foo", foo<orignalFunctionNamespace::type3>);
def("foo", foo<orignalFunctionNamespace::type4>);
def("foo", foo<orignalFunctionNamespace::type5>);
def("foo", foo<orignalFunctionNamespace::type6>);
def("foo", foo<orignalFunctionNamespace::type7>);
...
...
...
def("foo", foo<orignalFunctionNamespace::typeN>);
}
这可行,但我不能停止认为必须有更聪明的方法来做到这一点。由于我必须为许多功能执行此操作,因此事情变得越来越大并且超级重复。 有什么建议吗?
【问题讨论】:
-
这好像不是多态,只是函数重载。
-
不是更好的方法,但您可以尝试使用预处理器缩短每一行并“使用命名空间 originalFunctionNamespace;”进一步缩短它们。那个deos不能解决重复,但至少可以为你节省很多文本。
-
@interjay 该函数可以接收多种类型作为输入,并相应地输出多种不同类型。 “可以评估或应用于不同类型值的函数称为多态函数。”对吗?
-
@Nobody: 不会“使用命名空间 originalFunctionNamespace;”阻止我对 python 中的函数使用相同的名称?反正我知道你的意思,tnx :)
-
@quiuquio:我不会调用这种多态性,因为调用的实际函数是在编译时确定的,而不是动态确定的。另外,在 C++ 的上下文中,术语多态性是指具有虚函数的对象。
标签: c++ python templates boost polymorphism