Pull to refresh
0
Musikuma@Dacad

C++ developer as hobby

Send message

В данном случае это уже не проблема шаблона, ибо, например, следующая функция будет иметь ту же проблему:

rgba* get_rgba(Texture const &t)
{
  if (!t.has_pixels())
    t.load_rgba();
  return t.pixels;
}

На самом деле проблема кроется в использовании mutable, который имитирует const_cast для бизнес данных объекта, что делать не должен, ибо не предназначен для такой цели.

void foo(B *b, size_t size)
{
    for(auto &&el : std::span(b, size)) {
        std::cout << el.i << std::endl;
    }
}

Проблема этого когда не в том, что массив конвертируется в указатель, а то, что тут подразумевается массив на значения B, а не ссылки/указатели. Соответственно код даже знать не может о наследниках и по факту обрежет значения. Массивы на базовый класс передаются как B **b - аналог B *b[].

Для таких случаев ещё есть способ с преобразованием исключения реализации в исключение абстракции. Т.е. вместо выбрасывания наружу SqlException нужно преобразовать его во что-то вроде RepositoryException стерев тем самым данные о внутренней реализации и в тестах проверять уже исключение абстракции

Почему при обработке Вас интересует именно полное отсутствие аргументов, а не их достаточное количество?

Вы предпочитаете уронить приложение путём возврата кода возврата, нежели обрабатывать исключения? К тому же вывод ошибок в stdout вместо stderr.

Выделение класса Connection, конечно хорошо, но пихать туда почти всю логику явно перебор. Стоило разбить сущности.

Information

Rating
Does not participate
Date of birth
Registered
Activity

Specialization

Specialist
SQL
Linux
C++
C++ stl
C
Qt
Cmake
Git
Базы данных
C#