Я нахожусь в процессе изучения того, как работает JNI для вызова объектных методов C ++ из Java-программы. Я работаю с Android NDK / SDK, чтобы написать приложение.
Я новичок в JNI, и я хотел бы знать, поддерживается ли полиморфизм. То есть, предположим, у меня есть простой класс C ++:
class HeyBoy
{
public:
virtual int getValue()
{
return 10;
}
};
class HeyBoyDerived1 : public HeyBoy
{
public:
int getValue()
{
return 20;
}
}
class HeyBoyDerived2 : public HeyBoy
{
public:
int getValue()
{
return 30;
}
}
Во время выполнения я хочу, чтобы пользователь выбирал, какую реализацию использовать (1 или 2), просто нажав кнопку на интерфейсе приложения. Нужный объект C ++ должен быть создан.
Затем я бы поместил кнопку с надписью «Получить значение». Когда кнопка нажата, getValue()
метод текущей выбранной реализации должен быть вызван. После этого результат выводится на экран телефона.
Мне бы очень хотелось увидеть примеры кода!
Спасибо.
Краткий ответ: нет. JNI — это интерфейс C, он не знает C ++, классов, наследования или полиморфизма.
Более длинный ответ: да, функции C могут использоваться для вызова необходимых конструкторов и вызова виртуальных методов.
Других решений пока нет …