Не затруднит нисколько, но вам бы все равно книжку почитать, т.к. вы спрашиваете про совсем базовые вещи.
> NamePredicate(std::string _name) : name(_name) { }
это конструктор структуры NamePredicate. class и struct в плюсах отличаются только дефолтной видимостью членов, поэтому если будете читать в книге про конструктор класса - это то же самое, разницы нет.
У этого конструктора после двоеточия идет список инициализации полей - в нашем случае единственного поля name - начальными значениями. В данном случае - это значение параметра конструктора _name.
После вызова конструктора мы имеем инициализированный объект NamePredicate с нужым именем в поле name.
bool operator()(one o) {
return o.a() == name;
}
этот синтаксис имеет отношение к возможностям перегрузки операторов для пользовательских типов. В данном случае перегружается оператор вызова (круглые скобки), что позволяет вызывать ОБЪЕКТЫ класса NamePredicate как функции. Например:
NamePredicate predicate("Alex"); // создаем новый объект
one o = ....; // берем какой-нибудь объекта класса one
bool result = predicate(o); // вызываем объект predicate, будто это ФУНКЦИЯ. Точно также поступает и стандартный алгоритм std::count_if - вызывает тот функтор, что вы ему передаете для каждого объекта в коллекции, и считает, сколько вызовов вернуло true.
В нашем случае мы берем у переданного объекта имя и сравниваем его с тем значением, с которым был СОЗДАН наш функтор. Т.е. каждый объект функтора будет проверять совпадение с конкретным значением имени. В это и смысл лямбд - вы связываете код с некоторыми данными (реализацию оператора () и поле name) при СОЗДАНИИ лямбды, а другие данные передаются в момент ВЫЗОВА, но уже другим алгоритмом. Это все фичи из функциональных языков, почитайте про функции в ФЯ, как они создаются и используются, поймете все гораздо глубже.
Loligan: ну вам для чего NamePredicate-то? struct NamePredicate тоже играет роль лямбды - функционального объекта с собственными данными, связанными с кодом, просто без синтаксического сахара со стороны языка. Создавайте объект NamePredicate с нужным значением:
struct NamePredicate {
NamePredicate(std::string _name) : name(_name) { }
std::string name;
bool operator()(one o) {
return o.a() == name;
}
};
Александр с тимплейтами получилось что-нибудь? попробуйте кстати избежать перегрузки - сделайте setParentId, почему нет? и свойство тоже переименуйте в parentId, и попробуйте сначала без макроса.
> [](one o){ return o.a() == "Vasya"; }
Это лямбда-выражение. Представляет собой функцию, которая передается как значение одним из параметров в count_if. count_if затем вызывает эту лямбду для каждого элемента в переданном наборе. Те, для которых эта функция вернет true, будут посчитаны. Если знаете что такое лямбда (или first-class function) из других языков, почитайте про это в плюсах: en.cppreference.com/w/cpp/language/lambda
> и не получается реализовать в Qt
поддержка лямбд это C++11. Если вашим компилятором он еще не поддерживается (MinGW я так понимаю? какой версии? может надо просто ключ ему правильный передать? stackoverflow.com/questions/16136142/c11-functiona...), попробуйте классический вариант через struct и оператор вызова:
struct NamePredicate {
bool operator()(one o) {
return o.a() == "Vasya";
}
};
и передавайте так:
std::cout << std::count_if(ones.cbegin(), ones.cend(), NamePredicate());
cthulhudx работает может и всегда, не всегда понятна, тем более автору вопроса. Рискну предположить, что для него это игра слов), т.к. непонятно что такое "на языке", как не "с его использованием". Почитаешь книгу - станет понятно).
Kokcuk: ну вот ASP MVC точно не пишут, я ни разу такого не видел: rostov.hh.ru/search/vacancy?text=asp+mvc
Вы же видите, что человек не знает про заморочки с MS-овскими терминами и технологиями, откуда ж ему знать, скажите, что ASP.NET без приставки это webforms по дефолту? Он откроет вакансии, и будет думать что это все старые проекты, начатые еще в двухтысячных. А там в 2015-й студии весь asp.net-стек уже переделан.
Kokcuk Это все равно что на сегодняшний день утверждать "Очевидно, что когда говорят PHP, имеют ввиду PHP4". По-вашему если я открою вакансию и напишу туда ASP.NET-разработчик, то ко мне должны идти только ветераны Web Forms? Смею предположить, что для вас asp.net закончился в 2008-м году :)
seenotevil там еще вижу есть вопросы на классификацию - с ними тоже немного иначе. В общем совет - не пытаться решить в общем виде то, что не решается)
Я понял про соответствие, ну что ж, это конечно немного другой тип вопросов в принципе, тут само соответствие - это ответ, так что конечно их нужно организовывать иначе. Советую вам продумать вашу иерархию в плане что у вопросов общее, а чем они отличаются. Общим будет, например, стоимость вопроса в баллах, текст вопроса, служебная инфа - автор, дата изменения, а для каждого вопроса - свои данные об ответах. Где-то несколько ответов и подмножество(!) правильных (вопросы на выбор), для "письменных" вопросов - множество правильных ответов (если можно ответить по-разному), для соответствий советую сделать множество "левых" и "правых" элементов и множество правильных соответствий:
MatchingQuestionLeftItem(QuestionId, Number, Text)
MatchingQuestionRightItem(QuestionId, Number, Text)
MatchingQuestionItemMatch(QuestionId, LeftItemNumber, RightItemNumber)
При приеме ответа получаете множество ItemMatch-ей (соответствий) для данного вопроса по QuestionId, и смотрите эквивалентность множества пар в ответе и множества пар (LeftItemNumber, RightItemNumber), прилетевшего из базы.
Терминология отсюда: https://help.blackboard.com/en-us/Learn/9.1_SP_10_...
ivanich274 посмотрите еще, что указано в информации о DLL (в тултипе, когда наводишь на файл). borlndmm.dll это вроде менеджер памяти борландовский, значит это делфи или bc++. Что написано у Tutil32.dll и Ver71.dll?
Да, насчет sqlite - откройте файл Фаром или каким-нибудь HEX-редактором и посмотрите что в начале файла (можете скрин сделать). Если сигнатура известная, может поймем, что там.