16    std::unique_ptr<Model> m_model;
 
   17    std::unique_ptr<OptimizerFactory> m_optimizer_factory;
 
   22        : m_model(t_src.m_model->clone()),
 
   25          m_optimizer_factory(t_src.m_optimizer_factory ? t_src.m_optimizer_factory->clone() : 
nullptr) {}
 
   31        void hook_add_cut(
const TempCtr &t_cut)
 override {
 
   35        [[nodiscard]] std::string name()
 const override {
 
   36            return "user-cut-callback";
 
   41                : impl::CutSeparation(InvalidSolution, t_separation_problem, std::move(t_cut), t_type) {}
 
 
   46        if (!m_optimizer_factory) {
 
   47            throw Exception(
"No optimizer has been given.");
 
   50        auto* model = m_model->clone();
 
   51        model->use(*m_optimizer_factory);
 
   53        auto* result = 
new Strategy(model, m_cut, m_type);
 
   58    [[nodiscard]] CallbackFactory *clone()
 const override {
 
   59        return new UserCutCallback(*
this);
 
   62    UserCutCallback& with_separation_optimizer(
const OptimizerFactory& t_optimizer_factory) {
 
   64        if (m_optimizer_factory) {
 
   65            throw Exception(
"An optimizer has already been given.");
 
   68        m_optimizer_factory.reset(t_optimizer_factory.clone());