Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Локальные функции  (Прочитано 10432 раз)
0 Пользователей и 1 Гость смотрят эту тему.
mixa
Гость
« : 04-05-2004 19:17 » 

Что я накопал !!!  Показываю язык

Код:
void function ()
{
   class CLocal
   {
   public:
       static int blabla(int k)
       {
          return k + 1;
       };

       static int blabla2(int k)
       {
          return k + 2;
       };
   };

   int a1 = CLocal::blabla(1);
   int a2 = CLocal::blabla(2);
}

Плакал я, плакал за вложенными функциями в паскале, когда не надо каждую фигню в глобальные определения выносить, где можно посчитать что-то простое по месту - несколько раз. И вот что я придумал - работает !!! А вот насколько это переносимо ? Можно сколь угодно функций понаделать и даже не статическими (только тогда надо будет создать экземпляр) !!! Это же надо а я на С++ уже больше 10 лет пишу.
« Последнее редактирование: 25-11-2007 20:35 от Алексей1153++ » Записан
Serega
Гость
« Ответ #1 : 04-05-2004 20:46 » 

Поздравляю :!:  :!:  :!:  Отлично

странно что за 10 лет такого не использовал, не верю что ни разу не пользовался функторами

или ты не на С++ пишешь  :?:  Ага
Записан
grozny
Гость
« Ответ #2 : 04-05-2004 21:42 » 

начиная со стандарта ANSI C++ 1.0
Записан
mixa
Гость
« Ответ #3 : 08-05-2004 15:47 » 

Цитата: Serega
Поздравляю :!:  :!:  :!:  Отлично

странно что за 10 лет такого не использовал, не верю что ни разу не пользовался функторами

или ты не на С++ пишешь  :?:  Ага


Я даже перепроверил себя - нет все-таки с++.  Отлично А что такое функторы Не понял? В инете внятного не нашел.
Записан
Serega
Гость
« Ответ #4 : 08-05-2004 18:05 » 

Ооо, все-таки не С++ :l_rotate:
10 лет как-раз прошло со времени принятия стандарта.

Функтор это обьект, выступающий в роли функции (одна из идиом STL),
например
Код:
class Printer
{
public:
  void operator()(int i)
  {
    std::cout << i << std::endl;
  }
}

void main()
{
  Printer print;
  print(1);
}

Сам по себе пример не очень выразителен, но вкупе со стандартной библиотекой положение меняется
Код:
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

template <class T>
class Summa
{
T summa;
public:
Summa(const T& initialValue) : summa(initialValue) {}

Summa(const Summa<T>& other) : summa(other.summa) {}

void operator()(const T& value) { summa += value; }

operator const T() { return summa; }
};

template <class T>
class Average
{
long elems;
Summa<T> summa;
public:
Average() : elems(0), summa(0) {}

void operator()(const T& value)
{
elems++;
summa(value);
}

operator const T() { return  static_cast<T>(summa / static_cast<double>(elems)); }
};

void main()
{
vector<int> values;
for(int i = 0; i < 10; i++)
{
values.push_back(rand());
}

cout << "Values: ";
copy(values.begin(), values.end(), ostream_iterator<int>(cout, " "));
cout << endl;

cout << "Summa = ";
cout << for_each(values.begin(), values.end(), Summa<int>(0));
cout << endl;

cout << "Average = ";
cout << for_each(values.begin(), values.end(), Average<int>());
cout << endl;
}

Если интересно - читай
« Последнее редактирование: 25-11-2007 20:41 от Алексей1153++ » Записан
mixa
Гость
« Ответ #5 : 09-05-2004 21:42 » 

:new_yaya: Моя прочитала. И что этой хохмой они хотят насмешить Одессу Не понял
Цитата

Если интересно - читай
Записан
NetRaider
Гость
« Ответ #6 : 13-05-2004 05:59 » 

Цитата: mixa
Что я накопал !!!  Показываю язык
...
А вот насколько это переносимо ?


Все полностью легально и допускается стандартом. Но есть кое-какие ограничения: Локальный класс не может иметь статических членов(не функций) а также шаблонных функций-членов.
Записан
Serega
Гость
« Ответ #7 : 13-05-2004 06:30 » 

Но использовать в локальном классе шаблонные параметры внешней функции можно :!:
Записан
mixa
Гость
« Ответ #8 : 16-05-2004 18:58 » 

Цитата

Но использовать в локальном классе шаблонные параметры внешней функции можно

 Ну так на том и стоим.
 Улыбаюсь Спасибо большое
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines