Вызов функции через адрес поля класса

180
25 марта 2018, 21:38

Могу ли я определить указатель на функцию как поле в классе, записать в нее адрес функции (зная сигнатуру метода) и обращаться к данному полю как к функции?

К примеру так:

typedef void(*someSuperExtractedFunction(int,const char* const*));
class SomeFunctor
{
private:
    someSuperExtractedFunction* someAddress;
public:
    SomeFunctor()
    {
        someAddress = (someSuperExtractedFunction*)GetAdressOf("some_method");
        someAddress(0, nullptr);
    }
}
Answer 1

Да, можете. Вот пример:

#include <iostream>
using namespace std;
class My {
        void (*f)(int);
    public:
        My(void (*f)(int)): f(f) {}
        void doIt(int i) {
            f(i);
            }
    };
void g(int i) {
    cout << i << endl;
    }
int main() {
    My m(g);
    m.doIt(5);
    }
Answer 2

Некое дополнение к первому ответу. Можно вызвать функции с любым количеством аргументов любого типа

#include <iostream>
using namespace std;
template <class... T>
class My {
        void (*f)(T...args);
    public:
        My(void (*f)(T...args)): f(f) {}
        void doIt(T...i) {
            f(i...);
            }
    };
void g(int i) {
    cout << i << endl;
    }
void g1(const string s) {
    cout << s.back() << endl;
}
void mg(int i, const string s) {
    cout << i << '\t' << s;
}
int main()
{ 
    My<int> m(g);
    My<string>  ms(g1);
    m.doIt(5);
    ms.doIt("abc");
    My<int, string> mis(mg);
    mis.doIt(20, "efg");
    return 0;
}

И впринципе можно делать так, чтоб вызвались функции и с возвращающим типом

READ ALSO
C++ Серебряная матрица [N][N]

C++ Серебряная матрица [N][N]

Подскажите, в чем моя ошибка? Ни разу не засчитало ответ

344
Пожалуйста, помогите найти ошибку(LNK2001) с++

Пожалуйста, помогите найти ошибку(LNK2001) с++

Пожалуйста, помогите найти ошибку(LNK2001) в коде:

206
Консольная псевдографика в линуксе

Консольная псевдографика в линуксе

В windows есть библиотека для консольной графики: windowsh

182
Расчет Line of Sight в географической системе между двумя точками

Расчет Line of Sight в географической системе между двумя точками

Существует ли библиотека для расчета Line of Sight (LOS) между двумя точками на карте, указывая координаты, на C++? Есть ли данный способ в GeographicLib? Искал,...

164