Я только знакомлюсь с 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
Как можно использовать jni для абстрактного класса? ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1718919299
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){
...
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78629889/how-can-jni-be-leveraged-for-an-abstract-class[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия