Я сохраняю действие, которое нужно использовать для объекта, но я не хочу использовать наследование. Поэтому метод, который я использую, состоит в том, чтобы иметь функцию, отличную от члена, которая принимает указатель на объект, а затем сохраняет его в объекте, например:
struct command
{
command()
{
}
command(const std::function<void()>& action)
: action(action)
{
}
int n;
std::function<void()> action;
};
void test_action(command* this_ptr)
{
this_ptr->n = 5;
}
int main()
{
command com(std::bind(test_action, &com));
com.action();
std::cout << com.n;
}
Мой вопрос: безопасно ли делать command com(std::bind(test_action, &com));
? Или это поведение undefined?