Обновить
-1
Gunnar@Gunnar

Пользователь

1
Подписчики
Отправить сообщение
Последовательность фотографий, освещенных под определенным углом. Ну и поезд едет с определенной скоростью.
Ага, а еще Лайф прикольную рекламу отгрохал на перегоне Лукьяновка - Театральная. Там такая анимация в тоннеле - птицы, животные всякие. Я когда первый раз увидел, подумал что у меня галлюцинации.
Вы сначала вступите в ВТО, тогда и иски будете подавать.
Да, mem_fun - это одна из разновидностей обобщенных функторов. Другая инкапсулирует и указательна обьект, и указатель на функцию - т.е. для вызова ей нужно только [пустой] список аргументов. Используется для реализации паттернов "command", "chain of responsibility", "broadcaster-subscriber" и многих других. Применение очень широкое.
Поїзд далі не їде, звільніть будьласка вагони.
Ладно не будем спорить о терминах, а то уйдем не в ту сторону.
Ой, ошибся, каюсь.
Шаблоны в С++ - это как раз обобщенное программирование. Порождающее - это когда код порождается НА ЭТАПЕ ВЫПОЛНЕНИЯ программы, шаблоны же инстанциируются на этапе компиляции. По поводу "структурированные макросы на стероидах" даже спорить не хочу, макросы там и близко не валялись. Читаем Александреску, если интересует.
Указатель на функцию (не только функцию член, любую) туда вписывается очень даже естественно - это просто вызываемая сущность.
Та что ж это...


std::vector *A в угловых скобочках )))* v ;
Скобки пропали...

std::vector v;
А зачем изучать ассемблерный код???
Простых указателей на ф-ции не хватает по одной простой прчине, потому что функция не простая, член класса. И если вы изучали ассемблерный код, то наверное заметили, что указатель на функцию-член. И вызывается она немного по другому - компилятор должен запихнуть в стек указатель this, отсюда и "семантическая сложность", в которой я не виджу ничего сложного.

в данном случае и этого не нужно, потому что тут нет привязки к динамическим объектам. Можно через функцию всё сделать


Вы все таки не поняли для чего существуют функторы. Вот вам пример

class A
{
public:
void f () {}
};

void f (A* a)
{
a->f ();
}

void main ()
{
std::vector v;

std::for_each (v.begin (), v.end (), f);
std::for_each (v.begin (), v.end (), mem_fun(&A::f));
}

Другого способа обобщить такой вызов нет. Приведите пожалуйста "метод получше" из другого языка
Вы это мне говорите? :)
С последним абзацем частично согласен. С многопоточностью проблемы всегда были и будут. Просто нужно пользоваться библиотеками, которые предусматривают работу в многопоточной среде, ну и свое приложение проектировать исходя из этого.
Указатель на член - это инструмент обобщенного (или мета-) программирования и ООП здесь ни причем. Еще раз С++ - мультипарадигменный язык.

Ну и чего вы привязались к этому примеру со строками? Он был приведен просто для нагладности. Основное применение move семантики - передача владения (указателем, обьектом ядра, чем угодно) от временного обьекта к постоянному. А создавать подобные временные обьекты в куче, и наворачивать потом алгоритмы очистки памяти... это уже из другой оперы. С++ предназначен для решения критических задач, и здесь очень важно иметь полный контроль наж временем жизни обьекта. В С++09 сборщик мусора конечно будет, но там будет возможность решать, отдавать обьект ему на растерзание или нет.
Уточнение: функции-члену _любого_ класса.
Клиентский код вызывает обобщенный функтор, а тот неявно переадресовывает его функции члену, через указатель. Или я неправильно вас понял?
несколько противоречивое, не находите? Сначала вопрос: зачем перегружать? А потом радость по поводу нововведений

не нахожу, потому что это действительно необходимо. Без этих елементов невозможно (или возможно, но с ограничениями) решить большой класс задач, именно потому их добавили в стандарт.

А СИ++ перегружен, вне всяких сомнений. Когда в языке есть оператор ->*, который я даже прочитать на нормальном языке не могу, а только объяснить, как он работает, то это явный перебор со сложностью, imho.

Возможно где-то и перегружен, но только ради совметимости с С. По поводу ->*, а как вы предлагаете обозаначать доступ к члену класса по указателю? По моему, вполне логичное обозначение.
Не используется - множественное наследование, например. Ну, кто-то наверняка использует, но основное применение - это интерфейсы, что явно гораздо скромнее, чем первоначальный размах задуманного.
Тут согласен. Они бы уже навреное и рады были убрать его, но совместимость....

Или вот указатели на элементы классов.

Вот тут не согласен. Самое полезное применеие - обобщенные функторы.

А жить, вобщем-то можно и без stl.
Ну это уже вопрос религии. Благо, С++ не ограничивает нас в выборе, в отличие от той же Джавы
а как он будет применяться для создания первого rvalue? При выполнении первого сложения?


Нет, первая rvalue ссылка создается вызовом конструктора. Получаем неименованый обьект, т.е. rvalue. Нет тут ничего сложного. А поиск перегруженного оператора - просто сначала ищем оперетор, который принимает rvalue в качестве аргумента, если не нашли - ищем дальше по обычным правилам.

Информация

В рейтинге
Не участвует
Откуда
London, England - London, Великобритания
Зарегистрирован
Активность