У меня есть базовый класс Base
, со многими производными классами (например, Derived1
, Derived2
). Base
имеет чистую виртуальную функцию fn
, которая называется многократно с помощью указателя Base
. Каждый раз, когда вызывается функция, мне нужно сделать некоторые дополнительные записи и связанные с ними вещи. В частности, я использую BOOST_CURRENT_FUNCTION
в функциях производного класса, чтобы узнать, какая функция была вызвана. Есть ли способ узнать эту информацию до вызова функции, так что мне не нужно переписывать код бухгалтерии в каждой производной функции?Можно ли найти виртуальную функцию во время выполнения без вызова?
Редактировать: Я хочу, чтобы не писать __PRETTY_FUNCTION__
в каждой производной функции.
#include <iostream>
using namespace std;
class Base {
public:
virtual void fn() = 0;
};
class Derived1:public Base {
public:
void fn() {
cout<<__PRETTY_FUNCTION__<<endl;
}
};
class Derived2:public Base {
public:
void fn() {
cout<<__PRETTY_FUNCTION__<<endl;
}
};
int main()
{
int choice =0;
Base *ptr1 = nullptr;
cout<<"Choose 0/1: "<<endl;
cin>>choice;
if(choice == 0) {
ptr1 = new Derived1;
}else {
ptr1 = new Derived2;
}
//********CAN I WRITE SOMETHING HERE, TO GIVE THE SAME RESULT?
ptr1->fn();
}
Можете ли вы опубликовать небольшой пример того, чего вы хотите достичь, поэтому мы не отвечаем на «неправильные» вопросы? –
(Я уверен, из описания 'BOOST_CURRENT_FUNCTION', что это просто оболочка для' __PRETTY_FUNCTION__' или что-то подобное) –
Сделать метод не виртуальным, позволить ему вести книгу и вызывать действительную виртуальную функцию, methodImpl , – erenon