@KarlKremen

Передать блок Ruby как аргумент в СXX-extension?

Нужно в CXX-extension объявить метод, который принимал бы блок Ruby (чтобы прогресс задачи отслеживать). Использую биндинги RICE.
Вот есть метод класса в C++:
String PieceMaker::makeHash(void onProgress(int, int));

Я хочу из Ruby передавать ему блок:
pm.make_hash do |done, total|
  # code goes here
end

Но при компиляции расширения RIce не знает, как кастовать аргумент.
/home/kkremen/.rvm/gems/ruby-2.5.1/gems/rice-2.1.2/ruby/lib/include/rice/detail/../detail/Caster.hpp:36:54: error: invalid static_cast from type ‘void*’ to type ‘void (*)(int, int)’
       Derived_T * d(static_cast<Derived_T *>(derived));
                                                      ^
/home/kkremen/.rvm/gems/ruby-2.5.1/gems/rice-2.1.2/ruby/lib/include/rice/detail/../detail/Caster.hpp:37:37: error: invalid static_cast from type ‘void (*)(int, int)’ to type ‘void*’
       return static_cast<Base_T *>(d);
                                     ^


Что я делаю не так и как сделать, чтобы заработало?
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы