Как передать appUserFunc() в массив commands[]?
Имеется файл библиотеки и функция пользователя appUserFunc()
. Как передать эту функцию в ячейку массива commands[]
.
#include "lib.h"
void appUserFunc(){ cout << "appUserFunc" << endl;}
int main()
{
runTask();
}
file lib.h
#ifndef LIB_H
#define LIB_H
#include <iostream>
using namespace std;
void appSystemFunc(){ cout << "appSystemFunc" << endl;}
struct App
{
int num;
string text;
void (*f)(void);
};
App commands[]
{
{1, "app system", appSystemFunc},
{1, "app system", appUserFunc},
};
void runTask()
{
for(App comm : commands)
{
comm.f();
}
}
#endif
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Ну, я бы делал примерно так...
lib.h — только объявления
#pragma once
#include <string>
struct App
{
int num;
std::string text;
void (*f)(void);
};
void addTask(const App&);
void runTask();
lib.cpp — только реализации
#include <vector>
#include "lib.h"
namespace {
std::vector<App> commands;
};
void addTask(const App& a)
{
commands.push_back(a);
}
void runTask()
{
for(App comm : commands)
{
comm.f();
}
}
Ну, и где-то там использование
#include "lib.h"
#include <iostream>
using namespace std;
void appSystemFunc(){ cout << "appSystemFunc" << endl;}
void appUserFunc() { cout << "appUserFunc" << endl;}
int main(int argc, char * argv[])
{
addTask({1,"sys",appSystemFunc});
addTask({2,"usr",appUserFunc});
runTask();
}
Если же надо обходиться без вызовов addTask
, то надо создавать объекты App
, которые сами себя в конструкторе записывают в нужную коллекцию.
В любом случае, в .h — объявления, в .cpp — реализация.