Могу ли я определить указатель на функцию как поле в классе, записать в нее адрес функции (зная сигнатуру метода) и обращаться к данному полю как к функции?
К примеру так:
typedef void(*someSuperExtractedFunction(int,const char* const*));
class SomeFunctor
{
private:
someSuperExtractedFunction* someAddress;
public:
SomeFunctor()
{
someAddress = (someSuperExtractedFunction*)GetAdressOf("some_method");
someAddress(0, nullptr);
}
}
Да, можете. Вот пример:
#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);
}
Некое дополнение к первому ответу. Можно вызвать функции с любым количеством аргументов любого типа
#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;
}
И впринципе можно делать так, чтоб вызвались функции и с возвращающим типом
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Пожалуйста, помогите найти ошибку(LNK2001) в коде:
Существует ли библиотека для расчета Line of Sight (LOS) между двумя точками на карте, указывая координаты, на C++? Есть ли данный способ в GeographicLib? Искал,...