В следующей программе, Как мне ввести строку ввода для foo?
#include <iostream>
namespace NA {
class A {
public:
int (*foo)(int);
};
}
namespace NB {
class B : public NA::A {
public:
int bar(int i) {
std::cout << i << std::endl;
return i*2;
}
B() {
this->foo = bar; // how to type cast this fn pointer?
}
};
}
int main() {
NA::A *a = new NB::B();
std::cout << a->foo(2) << std::endl;
}
Я попытался выполнить приведение типа следующим образом, но что-то идет не так, когда я запускаю программу:
B() {
typedef int (*TypeFoo)(int);
this->foo = reinterpret_cast<TypeFoo> (&bar);
}
Вот результат, когда я запускаю:
$ ./a.out
31947824
63895648
Я ожидал 2 и 4. Как можно типизировать указатели на функции-члены выше?
Обновление : После просмотраОтветы, указывающие, что вышеупомянутая проблема не решена, я обновляю этот вопрос, добавив в него конкретную проблему, которую я пытался решить.
Пожалуйста, см. https://boringssl.googlesource.com/boringssl/+/HEAD/include/openssl/ssl.h#1173 - Я пытаюсь иметь разные экземплярыstruct ssl_private_key_method_st работает с различными закрытыми ключами.Я пытался получить другую структуру, наследуемую от ssl_private_key_method_st , и чтобы методы sign / decrypt / complete работали с переменными экземпляра унаследованной структуры.
Мне известно об использовании SSL_ [sg] et_ex_data для косвенной передачи данных в эти функции, но я искал более простой / прямой способ передачи данных экземпляра в эти функции, если это возможно.