Как можно использовать jni для абстрактного класса?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как можно использовать jni для абстрактного класса?

Сообщение Anonymous »

Я только знакомлюсь с jni/java и рабочим процессом, в котором мы хотим вызывать методы, написанные в собственном коде, но я пока не могу понять, как можно использовать JNI, если собственная библиотека C++ имеет абстрактную версию C++ класс, подобный приведенному ниже, который может быть унаследован C++ для создания конкретных классов C++, но также может быть расширен классом Java
class NumberInterface {
public:

using Numbers = std::unordered_set;

/**
* Getter to receive all numbers.
*
* @return Numbers.
*/
virtual Numbers getSupportedNumbers() = 0;

virtual bool handleNumber(unsigned int number) = 0;
virtual bool cancelNumber(unsigned int number) = 0;

};

Таким образом, если это общая библиотека, а не собственная, какая-то библиотека может ссылаться на нее, и она может иметь числовой класс, как показано ниже.
class Number : public NumberInterface {
public:
Numbers getSupportedNumbers() override;

bool handleNumber(unsigned int number) override;
bool cancelNumber(unsigned int number) override;
...
};

Что я пока не могу понять, так это то, что на стороне Java, если у меня есть библиотека/apk, которая должна использовать эту собственную служебную библиотеку, как я могу структурировать свою утилита или jni, чтобы у нас мог быть класс Java, расширяющий NumberInterface.
class JavaNumber extends JavaNumberInterfaceEquivalent {
...
}

----отредактировано, чтобы добавить фрагмент кода перемещения ---
я хочу, чтобы класс util также имел NumberManagerInterface, как показано ниже
/// NumberManagerInterface that can handle numbers.
class NumberInterface {
public:

/**
* Register modules that handle numbers.
*
* @return true if successful, false otherwise.
*/
virtual bool registerNumberModule(const std::shared_ptr& module) = 0;

virtual bool handleNumber(const unsigned int number) = 0;
virtual bool cancelNumber(const unsigned int number) = 0;

};

/**
* Sample NumberManager class.
*
*/
class NumberManager : public NumberManagerInterface{
public:
static std::shared_ptr createNumberManagerInstance(...);
bool registerNumberModule(const std::shared_ptr& module) override;
bool handleNumber(const unsigned int number) override;
bool cancelNumber(const unsigned int number) override;
...
private:
std::vector m_numberHandlers;
...
};

bool NumberManager::registerNumberModule(const std::shared_ptr& module){
// do some validation
m_numberHandlers.insert(module);
...
return true;
}

bool NumberManager::handleNumber(const unsigned int number){
//find the correct handler from m_numberHandlers
//call the correct handler
return handler->handleNumber(number);
}

void NumberManager::cancelNumber(const unsigned int number){
...
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... ract-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»