ZhenyaMak
@ZhenyaMak
Писать качественный софт? Пфф, это не для меня.

Как передать в аргумент функцию, и выполнить её, передаваю в неё параметры?

Хочу написать метод, который будет принимать функцию внутрь себя, передавать в неё параметры и выполнять её. Например для реализации map цикла.
  • Вопрос задан
  • 144 просмотра
Решения вопроса 2
@dima20155
you don't choose c++. It chooses you
Самый простейший пример.
Модифицируйте его если нужны ссылки на аргументы

#include <functional>
#include <iostream>

template <typename Func, typename ... Args>
void foo(Func func, Args ... args) {
    func(args...);
}

int main() {
    foo([](){ std::cout << "endl;" << std::endl; });
    foo([](int i){ std::cout << "int i: " << i << std::endl; }, 123);
}
Ответ написан
Комментировать
@Acaunt
Вот два простых примера как это можно сделать:
#include <iostream>
#include <functional>

void f(const std::string& str) {
    std::cout << str;
}

void foo(void (*f)(const std::string&), const std::string& str) {
    f(str);
}

void Foo(std::function<void(const std::string&)> F, const std::string& str) {
    F(str);
}


int main() {
    foo(f, "Hello");
    Foo(f, " world");
    return 0;
}


foo пример без использования STL
Foo пример с использованием STL

Но возможно, если ты планируешь передавать функции с разными аргументами и их количествами, то можно попробовать сделать через какой-нибудь std::initializer_list, но таким образом и все функции тоже нужно переделать чтобы они принимали этот тип.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Adamos
@Adamos
Ответ написан
Комментировать
@vanyamba-electronics
Это можно сделать с помощью указателя на функцию.
typedef void (*MyFuncPtr)(int);

void myfunc(int p) {
    cout << p << endl;
}

void func_caller(MyFuncPtr pfunc, int p) {
    assert(pfunc != nullptr);
    pfunc(p);
}

int main() {
   func_caller(myfunc, 666);
   return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы