Чего я пытаюсь добиться, так это создать структуру, в которой хранится любой метод. Позже я могу вызвать 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 сохранит их для личного использования.
Все, что я получаю с этим, это длинная строка ошибок, например:
ошибка: в объявлении ‘typename boost::enable_if_c‹(! boost::is_integral::value), boost::function&>::type boost::function::operator=(Functor)’
std::function
< /a> вместоboost::function
. - person Ted Lyngmo   schedule 20.04.2020this->_func;
ничего не делает, вам нужно вызвать функцию - person 463035818_is_not_a_number   schedule 20.04.2020run
? Если вы изменили его наoperator()
, вы можете использоватьboost::function<void()>
напрямую. - person Caleth   schedule 20.04.2020