jackroll я имею в виду уточнение понятия "фреймворк". Вам сложно было найти что-то, потому что вы искали фреймворк, а не отдельные компоненты, которые в него входят. Собственно, Mono пока единственная "полная" замена .Net Framework ("под ключ"), но с приходом docs.asp.net/en/latest/dnx/overview.html многое может измениться. В любом случае, Mono по-максимуму пытается построить совместимую реализацию, чтобы все приложения, работающие под .net fw, работали и под Mono. Поэтому вопрос плавно перетекает в следующие: 1) есть ли что-то еще кроме Mono, МАКСИМАЛЬНО совместимое с майкрософтовским дотнетом? 2) нужен ли нам полностью другой самостоятельный фреймворк, имеющий другую библиотеку классов? В чем он тогда будет совместим с майкрософтовским, кроме стандарта языка C#?
Вам какой аспект непонятен?
Олег если серьезно, то нормальная платформа, изначально ее репутация была, безусловно, испорчена привязкой к винде, но сейчас они исправляют это всеми силами (ибо начали зарабатывать на услугах, а не на платформе). Ни сам дотнет, ни C# в частности никакой привязки к Win не имеют. Скоро выходит новая платформа (новый asp.net, новый рантайм - DNX), и MS активно работает с Mono над слиянием реализаций CLR, библиотеки классов и прочего. Новый asp.net будет работать на линукс и Mac by design, а не через костыли.
Не затруднит нисколько, но вам бы все равно книжку почитать, т.к. вы спрашиваете про совсем базовые вещи.
> 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-м году :)
Вам какой аспект непонятен?