gpt4 book ai didi

java - 如何处理在 SWIG 中为 shared_ptr 返回 nullptr 的方法(C++ 到 Java)

转载 作者:行者123 更新时间:2023-11-28 05:50:07 25 4
gpt4 key购买 nike

我需要将现有的 C++ 库移植到 Java。在 C++ 代码中有一个工厂方法:

std::shared_ptr<Role> createRole(std::string name)

如果无法创建角色,它将返回一个 nullptr

不幸的是,如果我尝试使用 SWIG 移植此代码,此时它会无提示地失败。我猜这是因为 Java 不知道 nullptr 而 SWIG 很可能会忽略它。我的假设对吗?因为我本来就是一个Java开发者,对SWIG和C++了解不多……

很遗憾,我无法更改现有的 C++ 代码。有什么解决方法吗?或者我必须为这种特殊情况编写一个包装器吗?这个问题出现在项目中的4、5个地方。

最佳答案

问题很可能出现在您的代码中。我刚刚使用 gcc-4.8 和 swig-2.0 检查了以下代码,它运行良好:

测试.h

#include <string>
#include <memory>

class Test {
public:
std::shared_ptr<std::string> test(bool isNull) {
return isNull ? nullptr : std::make_shared<std::string>("test");
}
};

测试.i

%module "test"

%include "std_shared_ptr.i"
%include "std_string.i"

%shared_ptr( std::string )

%{
#include "test.h"
%}

%include "test.h"

检查.py

import test
t = test.Test()
print t.test(True)
print t.test(False)

python check.py 的输出是:

None
<Swig Object of type 'std::shared_ptr< std::string > *' at 0x7f03436501e0>swig/python detected a memory leak of type 'std::shared_ptr< std::string > *', no destructor found.

关于java - 如何处理在 SWIG 中为 shared_ptr 返回 nullptr 的方法(C++ 到 Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35436083/

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