У меня есть тип данных, которые должны храниться в смежном массиве, который повторяется для обновления этих данных. Сложная часть заключается в том, что я хочу иметь возможность динамически изменять способ обновления любого объекта.
Это то, что я придумал до сих пор:
struct Update {
virtual void operator()(Data & data) {}
};
struct Data {
int a, b, c;
Update * update;
};
struct SpecialBehavior : public Update {
void operator()(Data & data) override { ... }
};
Затем я бы присвоил каждому объекту данных некоторый тип обновления. Затем во время обновления все данные передаются его собственному функтору обновления:
for (Data & data : all)
data->update(data);
Это, насколько я понимаю, называется шаблоном стратегии.
Мой вопрос: есть ли способ сделать это более эффективно? Какой-то способ добиться такой же гибкости без затрат на вызов виртуального метода?