Я пытаюсь создать структуру, которая хранит любой метод. Позже я могу вызвать struct_object.run () для запуска сохраненного мной метода.
Этот метод может возвращать любые значения и, что наиболее важно, использовать любое количество параметров; однако я не могу обойти проблему «любого количества параметров».
Имейте в виду, следующий код даже не создается, в основном потому, что я понятия не имею, на что будет похож правильный синтаксис.
ApplicationPair.h
template<typename T, typename... Args>
struct ApplicationPair
{
ApplicationPair(boost::function<T()> func, Args... arguments )
{
_func = func(Args::arguments...);
}
ApplicationPair() = delete;
void run();
boost::function<T(Args...)> _func;
};
#endif
И затем я хотел бы сделать следующее:
main. cpp
template<typename T, typename... Args>
void ApplicationPair<T,Args...>::run()
{
this->_func;
}
//TEST
int counter = 0;
void HelloWorld()
{
std::cout << "HelloWorld\n";
}
void printNumber(int i)
{
std::cout << "Print: " << i << std::endl;
}
void increaseCounter(int x)
{
counter+=x;
}
int main()
{
ApplicationPair<void> p1(HelloWorld);
ApplicationPair<void> p2(printNumber, 5);
ApplicationPair<void> p3(increaseCounter, 10);
p1.run();
p2.run();
p3.run();
return 0;
}
По сути, методы, которые я хочу сохранить, не должны быть изменены или адаптированы каким-либо образом: я хочу иметь возможность создавать любые методы, не заботясь о том, что struct ApplicationPair будет хранить его для личного использования.
Все, что я получаю при этом, это длинная строка ошибок, таких как:
error: в объявлении 'typename boost :: enable_if_ c <(! Boost :: is_integral :: value), boost :: function &> :: type boost :: function :: operator = (Functor) '