Вот здесь два немаленьких таких куска одинакового кода. Что заставило автора дублировать эти простыни вместо того, чтобы сделать одну вспомогательную функцию, указатель на которую затем отдается в SetCreateThumbnailCallback? Не понимаю.
Ниже тоже неплохо. Три почти одинаковых фрагмента, отличающиеся всего одной строчкой в середине. Но тут хотя бы понять можно почему именно так: может мы ограничены C++11 и нет возможности использовать обобщенные лямбды, да и фрагменты коротенькие, типа не так засоряют восприятие.
Однако, для меня лично все равно это попахивает известной субстанцией. Слишком уж много лишних деталей вываливается на пользователя, да и не сложно уже существующий код видоизменить так, чтобы не приходилось вручную звать close() для открытых std::ifstream. Хотя я бы все равно сделал бы что-то вот такое, если бы пришлось оставаться в рамках C++11:
template<typename Setter> void trySetBookmarksFromFile(const char * fileName, Setter && setter) { std::ifstream docFile(fileName, std::ios::in); if(docFile) { std::stringstream strStream; strStream << docFile.rdbuf(); setter(strStream.str()); } } trySetBookmarksFromFile("bookmarks_1.conf", [](const std::string & v) { ImGuiFileDialog::Instance()->DeserializeBookmarks(v); }); trySetBookmarksFromFile("bookmarks_2.conf", [&fileDialog2](const std::string & v) { fileDialog2.DeserializeBookmarks(v); }); trySetBookmarksFromFile("bookmarks_c.conf", [&cfileDialog](const std::string & v) { IGFD_DeserializeBookmarks(cfileDialog, v.c_str()); }); |
В общем, бомбануло меня изрядно. Ну не люблю я копипасту в коде, как по мне, так это один из ярчайших признаков непригодности к профессии. А уж какой это рассадник для всяческих проблем, особенно при сопровождении... Не передать словами.
В общем, не делайте так.