Я пытаюсь изменить код. В настоящее время этот код соответствует шаблону:
function f() {
Transaction trans;
// Do Operation
trans.commit();
}
Здесь транзакция является конкретным классом. Я хочу переместить его в интерфейс и сделать этот код похожим на:
function f() {
ITransaction* trans = GetTransaction();
// Do Operation
trans->commit();
}
// Factory
ITransaction* GetTransaction()
{
return new Transaction();
}
ПРОБЛЕМА: мы начали использовать метод new здесь, в фабрике, который теперь выполняет выделение кучи. Я хочу избежать такого распределения кучи и все же удается использовать интерфейс.
Есть ли способ добиться этого?
Спасибо,
Кайлас
То, что вы можете сделать, это что-то вроде размещения класса Factory в стеке.
void function() {
Factory factory{};
auto transaction = factory.getTransaction(arguments...);
}
Фабрика может выглядеть так:
class Factory {
A aTransaction;
B bTransaction;
C correctTransaction;
transactionBase* getTransaction(arguments...) {
//return one member based on arguments
}
}
Однако, если ваши аргументы допускают шаблоны, становится немного легче сделать что-то вроде
void function () {
Factory<Arguments...> transaction;
}
Других решений пока нет …