Как мне вернуть 'nil' из расширения ruby C ++ с помощью Rice?

0

Я разрабатываю расширение Ruby C++, используя Rice, и имею метод finder в C++, который возвращает указатель или указатель 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;
}

Этот метод завернут в рубин следующим образом:

    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);

Я хочу, чтобы метод рубина find_instrument вернуть ноль в случае, если прибор не найден. До сих пор я получаю в рубине объект 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
...

Я подумал, что Райс знает, как управлять указателями NULL и делать преобразование в объект ruby nil...

  • Я сделал что-то неправильно (я не специалист C++)?
  • Что я могу сделать, чтобы вернуть нуль?
Теги:
null
ruby-rice

1 ответ

0

в C++, NULL равен 0, это не указатель, который определен в cstddef #define NULL 0 попытаться вернуть значение nullptr instand

Ещё вопросы

Сообщество Overcoder
Наверх
Меню