Open alexey-malov opened 8 years ago
#include <boost/algorithm/string/join.hpp>
#include <boost/range/algorithm/transform.hpp>
#include <boost/format.hpp>
using boost::accumulate;
using boost::wformat;
using boost::adaptors::transformed;
using boost::algorithm::join;
vector<wstring> pluginClassNames = {L"someClass1", L"somePackage.SomeClass2", ....};
auto makeClassNameImported = [](const wstring& className){
return (wformat(L"import %1%;\n") % className).str();
};
auto pluginImports = accumulate(pluginClassNames | transformed(makeClassNameImported), wstring());
/* pluginImports - строка содержащая текст
import someClass1;
import somePackage.SomeClass2;
...
*/
auto pluginClassNameList = join(pluginClassNames, L", ");
/* pluginClassNameList - строка, содержащая имена классов перечисленные через запятую
*/
/*
В дальнейшем может использоваться для генерирования фрагментов кода вроде этого:
package
{
import someClass1;
import somePackage.SomeClass2;
class SomeClass
{
public function someMethod()
{
const classNames:Array = [someClass1, somePackage.SomeClass2];
}
}
}
*/
someAlgorithm(
names | filtered(IsMaleName)
| transformed(ToUpperCase),
someAdditonalParametersOfTheAlgorithm);
// Диапазон элементов директории, полученный в результате рекурсивного обхода директории m_root
auto storageContent = make_iterator_range(recursive_directory_iterator(m_root), recursive_directory_iterator());
// Предикат, сообщающий о том. является ли элемент каталога файлом
auto IsFile = [](directory_entry const& entry) {
return is_regular_file(entry.status());
};
auto filesOnly = storageContent | filtered(IsFile);
// Инфу о каждои файле внутри каталога помещаем в map<путь-к-файлу, состояние файла>
transform(filesOnly, inserter(m_files, m_files.end()),
[&rootPath](directory_entry const& entry){
auto filePath = make_relative(rootPath, entry.path()).generic_wstring();
return make_pair(filePath, CFileInfo());
});
CCLIMenu, пожалуй, слишком большой и переусложненный. Разбить на несколько подклассов
Для сериализаторов и десериализаторов написать тесты, чтобы удостовериться, что загрузка и сохранение не сломаются после внесения изменений
В классе CPerson убрать константность с переменной m_gender, т.к. она усложняет операции над людьми с использованием алгоритмов и контейнеров STL для возврата списка ссылок на результаты поиска лучше использовать transform отфильтрованного диапазона, т.к. на входе и на выходе - разные типы данных.
Тут уместнее было бы алгоритм find_if использовать. C boost.range становится вообще просто
https://channel9.msdn.com/Events/GoingNative/2013/Cpp-Seasoning