Этот вопрос преследует меня уже несколько дней. Это выглядит очень просто, но мне очень трудно это понять.
По сути, я хочу сделать что-то вроде функции async_wait в следующем фрагменте кода
boost::asio::io_services io;
boost::asio::deadline_timer timer(io);
timer.expires_from_now(boost::posix_time::milliseconds(1000));
timer.async_wait(boost::bind(&FunctionName, arg1, arg2, ...)); // How to implement this in my class A
Мой пример кода:
#include <iostream>
#include <string>
//#include <boost/*.hpp> // You can use any boost library if needed
// How to implement this class to take a handler with variable number of arguments?
class A
{
public:
A()
{
}
void Do()
{
// How to call the handler with variable number of arguments?
}
};
void FreeFunctionWithoutArgument()
{
std::cout << "FreeFunctionWithoutArgument is called" << std::endl;
}
void FreeFunctionWithOneArgument(int x)
{
std::cout << "FreeFunctionWithOneArgument is called, x = " << x << std::endl;
}
void FreeFunctionWithTwoArguments(int x, std::string s)
{
std::cout << "FreeFunctionWithTwoArguments is called, x = " << x << ", s =" << s << std::endl;
}
int main()
{
A a;
a.Do(); // Will do different jobs depending on which FreeFunction is passed to the class A
}
P.S .: при необходимости вы можете использовать любую библиотеку boost, такую как boost :: bind, boost :: function