Посетите вариант вложенных классов: как избежать избыточного кода?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Посетите вариант вложенных классов: как избежать избыточного кода?

Сообщение Anonymous »

У меня много полиморфных классов. Каждый из них имеет вложенный класс с именем конфигурации , содержащий все гиперпараметры, необходимые для класса. Для каждого дерева класса я создаю вариант возможных конфигураций и функциональной экземпляры , способной создать экземпляр из конфигурации. Как в примере ниже. < /P>

Код: Выделить всё

# include 
# include 

class Base
{};

class A : public Base
{
public:
struct Configuration { /*hyperparameters*/ };
A(Configuration const&) {}
};

class B : public Base
{
public:
struct Configuration { /*hyperparameters*/ };
B(Configuration const&) {}
};

struct BaseConfiguration
{
using type = std::variant;
static std::unique_ptr instantiate(type const& config);
};

struct BaseVisitor
{
// My problem is here...
std::unique_ptr operator()(A::Configuration const& config)
{ return std::make_unique(config); }
std::unique_ptr operator()(B::Configuration const& config)
{ return std::make_unique(config); }
};

std::unique_ptr BaseConfiguration::instantiate(type const& config)
{
return std::visit(BaseVisitor(), config);
}

int main()
{
BaseConfiguration::type config = A::Configuration();
std::unique_ptr x = BaseConfiguration::instantiate(config);
return 0;
}
Я хотел бы избежать кода редактирования в классе Basevisitor . Все функции не являются одинаковыми (много функций для некоторых иерарков). есть ли способ уменьшить этот код?

Код: Выделить всё

struct BaseVisitor
{
template 
std::unique_ptr operator()(typename X::Configuration const& config)
{ return std::make_unique(config); }
};
< /code>
ошибка компилятора: < /p>
: In static member function 'static std::unique_ptr BaseConfiguration::instantiate(const type&)':
:36:22: error: no matching function for call to 'visit(BaseVisitor, const BaseConfiguration::type&)'
36 |     return std::visit(BaseVisitor(), config);
|            ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
Тот же код в компиляторе Explorer

Подробнее здесь: https://stackoverflow.com/questions/794 ... ndant-code
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Посетите вариант вложенных классов: как избежать избыточного кода?
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Посетите вариант вложенных классов: как избежать избыточного кода?
    Anonymous » » в форуме C++
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Как избежать избыточного ручного назначения переменных среды в настройках Django?
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Как избежать избыточного ручного назначения переменных среды в настройках Django?
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Как избежать избыточного ручного назначения переменных среды в настройках Django?
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»