我正在使用Rice开发Ruby C ++扩展,并且在C ++中有一个finder方法,它返回指针或NULL指针。
Instrument* Parser::getInstrumentPtr(const long int code) {
Instrument* instru = NULL;
instrument_db::iterator instr_iter = std::find_if(instruments.begin(), instruments.end(), FindInstrument(code));
if (instr_iter != instruments.end())
{
instru = &(*instr_iter);
}
else
std::cout << "Not found C++" << std::endl;
return instru;
}
此方法包含在ruby中,如下所示:
Data_Type<Parser> rb_cParser = define_class<Parser>("Parser")
.define_constructor(Constructor<Parser, const char*>())
.define_method("file=", &Parser::setFileName)
.define_method("file", &Parser::getFileName)
.define_method("instruments", &Parser::getInstruments)
.define_method("find_instrument", &Parser::getInstrumentPtr)
.define_method("find_instrument_by_composite_code", &Parser::getInstrumentByCompositeCode);
如果找不到工具,我希望ruby方法 find_instrument 返回 nil 。 到目前为止,我正在使用一个Instrument对象:
instr_parser.instruments.each do | instr|
instr_ref = parser.find_instrument(instr.code)
pp instr_ref
if !instr_ref.nil?
#puts "Found instrument #{instr_ref.code}"
puts "Reference is instrument #{instr.code}"
else
puts "Not found"
end
end
======> OUTPUT ======>
#<Instrument:0x000000087a1ab8>
Reference is instrument -1
Not found C++
#<Instrument:0x000000087a1158>
Reference is instrument -1
...
我认为Rice知道如何管理NULL指针并转换为ruby nil对象......
答案 0 :(得分:0)
在C ++中,NULL为0,它不是指针,它在cstddef中定义#define NULL 0
尝试返回nullptr instand