gpt4 book ai didi

c++ - 使用 SWIG 处理 std::function

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:43 27 4
gpt4 key购买 nike

显然,SWIG 不理解 std::function 并破坏了 Python 绑定(bind)。例如,这适用于 C++:

// Somewhere in the API
typedef std::function<void(const UnitError & error)> UnitErrorHandler;

// Somewhere else in the API
void Unit::setErrorHandler(const UnitErrorHandler & handler) {}

// In the application code
unit->setErrorHandler([](const UnitError & error){
std::cerr << error << std::endl;
std::exit(1);
});

但这会破坏代码(除了为了简单起见而具有不同的行为,但这不是重点):

unit.setErrorHandler(lambda error: len(error))

def(普通)未绑定(bind)函数的情况相同。那么,有人知道解决这个问题的方法吗?

最佳答案

std::function 相对较新 (C++11),因此 SWIG 没有任何开箱即用的解决方案。虽然不那么灵活,但您可以使用函数指针,但需要注意的是。引用 5.4.9 Pointers to functions and callbacksdocs :

...SWIG provides full support for function pointers provided that the callback functions are defined in C and not in the target language.

所以传递 lambda 是行不通的。阅读文档链接以了解一些替代方法。

关于c++ - 使用 SWIG 处理 std::function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17282772/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com