Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
1

Реальное применение локальных классов

28.10.2016, 15:08. Показов 1229. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем-то читал Александреску и вспомнил старую главу о локальных классах.
Там приводился пример с использованием локальных классов, как полиморфных производных классах.
Но вот без полиморфизма имеют ли применение такие классы?
Если кто не понял мой поток мыслей, то вот примерно такой код имеет место быть и используется где-нибудь?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
auto foo()
{
    struct A
    {
        void bar( int n ) { std::cout << n << std::endl; }
    } ret;
    return ret;
}
 
int main()
{
    auto a = foo();
    a.bar( 0 );
    foo().bar( 1 );
}
О примере говорю, как об парадигме скорее, чем как о реальной реализации.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2016, 15:08
Ответы с готовыми решениями:

Реальное применение классов и заголовочных файлов
работаю с Visual Studio около полугода, и нигде не видел более иезуитского способа организации...

Реальное применение рекурсивных вычислений
Добрый день. Ползая по форуму https://www.cyberforum.ru я обратил внимание, что довольно часто...

Программирование с использованием локальных классов
Хелп, мой вариант девятый.

В каких случаях оправданно использование локальных классов?
Здравствуйте. Вопрос: в каких случаях оправданно использование локальных классов? Или когда нужно...

6
Эксперт С++
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
28.10.2016, 15:39 2
Цитата Сообщение от GbaLog- Посмотреть сообщение
В общем-то читал Александреску

Не по теме:

могу порекомендовать надевать каску при прочтении данной книги, дабы предотвратить разбрызгивание мозгов от разорвавшейся головы по комнате... :))


Цитата Сообщение от GbaLog- Посмотреть сообщение
такой код имеет место быть и используется где-нибудь?
я довольно часто делаю нечто подобное... таким образом можно икапсулировать вспомогательные классы которые нужны только тому классу, внутри которого он находится. Таким же образом можно сделать что-то типа неймспейса, если последний по какой-то причине не хотите/можете использовать, типа сделать класс описанный внутри как public и он будет виден всем наружу, так сказать покажете свои "кишки" соседям (это не очень в плане архитектуры, но иногда такое встречал).
1
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.10.2016, 16:07 3
Ну так лямбда это тоже вроде-как локальный класс- функтур.

Как в примере здесь http://en.cppreference.com/w/cpp/algorithm/sort

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <algorithm>
#include <array>
#include <iostream>
 
int main()
{
    std::array<int, 10> s = {5, 7, 4, 2, 8, 6, 1, 9, 0, 3}; 
 
    struct{ bool operator()(int a, int b) { return a < b; } } customLess;
    
    std::sort(s.begin(), s.end(), customLess);
    for (auto a : s) 
        std::cout << a << " ";
}
http://ideone.com/4zbXDE
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
28.10.2016, 16:09 4
Цитата Сообщение от Maxim Prishchepa Посмотреть сообщение
я довольно часто делаю нечто подобное... таким образом можно икапсулировать вспомогательные классы которые нужны только тому классу, внутри которого он находится
а вы не путаете локальные классы функций и nested class ? Поддерживаю про лямбду, но если нужен именно класс локальный, лучше в cpp создать namespace details и там его пописать - будет класс helper.
2
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.10.2016, 16:12 5
del
0
Эксперт С++
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
28.10.2016, 16:16 6
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
а вы не путаете локальные классы функций и nested class ?
возможно, не претендую на "последнюю инстанцию"
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.10.2016, 16:22 7
Вероятно, если есть auto, то можно наваять такой синглитон:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
auto& instance()
{
  struct Singliton
  {
    void bar( int n )
    {
      std::cout << n << std::endl;
    }
  };
  static Singliton instance_;
  return instance_;
}
 
int main()
{
  instance().bar(5);
 
  return 0;
}
0
28.10.2016, 16:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2016, 16:22
Помогаю со студенческими работами здесь

Практическое применение классов без создания объектов этого класса
Приветствую всех! Читай книгу Р. Лафоре &quot;ООП в C++&quot; увидел вопрос: &quot;Истинно ли следующее...

Реальное применение
Посмотрел я на этот язык, вроде не особо сложный. Но вот вопрос, где его применять кроме мат...

Интерфейсы - их реальное применение в работе
Какой у вас опыт работы с интерфейсами? как их можно использовать так, что бы они были полезными?

Математическая задачка, имеющая реальное практическое применение
Добрый день, уважаемые форумчане. Очередной раз обращаюсь за Вашей помощью. Скажите пожалуйста...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru