Как лучше всего использовать DRY с некоторыми специальными экземплярами классов?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как лучше всего использовать DRY с некоторыми специальными экземплярами классов?

Сообщение Anonymous »


Иногда в моем коде мне хочется определить несколько экземпляров одного и того же класса, при этом разница в определении будет небольшой по сравнению с его общей длиной и будет иметь некоторый общий указатель. И я изо всех сил пытаюсь реорганизовать код, чтобы он был компактным и простым в использовании.

Пример: я начинаю с:

auto blue_foo = std::make_unique(n); auto blue_bar = std::make_unique(m); auto blue_baz = std::make_unique(k); Это немного неприятно: повторение команд и префиксов имен... :-(

Я могу поместить эти переменные в структуру с именем blue, чтобы можно было писать

do_stuff_with(blue.foo, blue.baz, 123); а не

do_stuff_with(blue_foo, blue_baz, 123); но - тогда мне понадобится еще больше повторений:

struct { std::unique_ptr foo, bar, baz; } синий = { std::make_unique(n), std::make_unique(m), std::make_unique(k), }; Так расточительно! Мне бы хотелось хотя бы написать что-то вроде:

struct { auto foo, bar, baz; } Фу = { std::make_unique(n), std::make_unique(m), std::make_unique(k), }; но это невозможно.

Кроме того, я не хочу повторять вызов make_unique. Полагаю, я мог бы написать лямбду:

auto make_data = [](std::size_t size) { return std::make_unique(size); } struct { auto foo, bar, baz; } синий = { make_data(n), make_data(m), make_data(k) }; но лямбда требует много написания; и это не особо экономит. И даже в этом есть повторения.

Каков идиоматический подход к тому, чтобы сделать мой первоначальный фрагмент кода компактным и читаемым?

Примечание. В этом примере фрагмент кода не повторяется много раз; только раз. Если бы я неоднократно использовал комбинацию foo, bar и baz, я бы написал класс для их хранения.
Ответить

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

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

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

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

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