Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2018, 19:33   #11
cyberdev
Форумчанин
 
Аватар для cyberdev
 
Регистрация: 10.10.2013
Сообщений: 150
По умолчанию

Цитата:
Сообщение от New man Посмотреть сообщение
Функцию тоже можно рассматривать как модуль. В таком случае, то, что ты не можешь передать в модуль достаточное количество аргументов, говорит о том, что она у тебя сильно связана с остальным кодом.

Поясню тебе за интерфейсы.

Цитата:
Сообщение от New man Посмотреть сообщение
Повторяю, твою проблему можно решить с помощью ООП.
Суть ООП в том, что объекты инкапсулируют в себе данные и методы их обработки.
То есть, тебе надо создать класс, который имеет следующий формат:
Мудрено и путано. Я и сам это знаю, но в данной задаче не нужно это мне! И еще мне кто-то говорит о г... в коде?

На Делфи или на нормальном С++ уже сделал бы и забыл давно!
Сайт о программировании и трехмерной графике - cybersite.ucoz.net
cyberdev вне форума Ответить с цитированием
Старый 14.03.2018, 19:38   #12
cyberdev
Форумчанин
 
Аватар для cyberdev
 
Регистрация: 10.10.2013
Сообщений: 150
По умолчанию

Цитата:
Сообщение от New man Посмотреть сообщение
Конечно, это же Вы читаете свой код
Подванивает когда не о коде говорят а об этом биологическом продукте жизнедеятельности. И тошнит еще к тому же. В то время, как от любого кода ощущения нормальные. Так что перестань плеваться биологическим продуктом жизнедеятельности. Здесь форум программистов, а не биологов.
Сайт о программировании и трехмерной графике - cybersite.ucoz.net

Последний раз редактировалось cyberdev; 14.03.2018 в 19:40.
cyberdev вне форума Ответить с цитированием
Старый 14.03.2018, 19:44   #13
cyberdev
Форумчанин
 
Аватар для cyberdev
 
Регистрация: 10.10.2013
Сообщений: 150
По умолчанию

Цитата:
Сообщение от New man Посмотреть сообщение
Надеюсь, я тебе прояснил твои возможности
Будь столь любезен, не пиши в эту ветку!
Сайт о программировании и трехмерной графике - cybersite.ucoz.net
cyberdev вне форума Ответить с цитированием
Старый 14.03.2018, 19:49   #14
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от cyberdev Посмотреть сообщение
Часто бывает, что один и тот же фрагмент кода повторяется очень много раз в разных участках программы. Чтобы много раз не переписывать один и тот же фрагмент во время его редактирования в Делфи, например, существуют локальные подпрограммы.

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

  procedure Proc();
    var
      a, b, c : Integer;

    procedure Sub1();
    begin
      Dec(c, b);
      Inc(c);
    end;

    procedure Sub2();
    begin
      Dec(c, a);
    end;

  begin
    a := 1; b := 2; c := 3;
    Sub1();
    Writeln('c: ', c);
    Sub2();
    Writeln('c: ', c);
    Readln;
  end;


begin
  Proc();
end.
В C++ это можно сделать с помощью макросов
Или лямбд, начиная со стандарта 11го года. Других способов нет.
Например так

Код:
void proc()
{
     int a,b,c;
     auto sub1 = [&c, &b](){c-=b; ++c;};
     auto sub2 = [&c, &a](){c-=a;};
     a = b = c = 1;  
    sub1();
    sub2();
}
Все другие предложенные способы делают то же самое, что и дельфи БЕЗ вложеных процедур.

Можно на макросах:


Код:
#define sub1 {c-=b; ++c;}
#define sub2 {c-=a;}
void proc()
{
     int a,b,c;
     a = b = c = 1;  
    sub1;
    sub2;
}

//застрахерим себя от ошибок повторного использования
#undef sub1
#undef sub2
Главный недостаток макросов, что их не возможно дебажить. Собственно у вас в этом и проблема. Т.к. макросы - это автоматический копи-пейст кода перед компиляцией по сути и дебугер его не видит.
Можно дебажить в ассемблерном виде.
Поэтому и придуманы лямбды наконец-то.

Последний раз редактировалось alexzk; 14.03.2018 в 20:00.
alexzk вне форума Ответить с цитированием
Старый 14.03.2018, 19:57   #15
cyberdev
Форумчанин
 
Аватар для cyberdev
 
Регистрация: 10.10.2013
Сообщений: 150
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Или лямбд, начиная со стандарта 11го года
Лямбды в моей версии скриптового С++ не работают. Можно вроде с помощью шаблонов. Но как реализовать с помощью них локальные функции? В интернете не нашел ничего по этому поводу.
Сайт о программировании и трехмерной графике - cybersite.ucoz.net
cyberdev вне форума Ответить с цитированием
Старый 14.03.2018, 20:02   #16
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от cyberdev Посмотреть сообщение
Лямбды в моей версии скриптового С++ не работают. Можно вроде с помощью шаблонов. Но как реализовать с помощью них локальные функции? В интернете не нашел ничего по этому поводу.
Никак. Локальные функции в С++ не допустимы. Чтобы вы не придумали - это все равно будут внешние функции без прямого доступа в локальным переменным, т.е. нада городить передачу через указатели/ссылки, как параметры и т.д.

Собственно вам нужно перепланировать программу, как писали выше. Сделать класс, с методами, полями и т.д. И да, писанины будет больше в разы.

Последний раз редактировалось alexzk; 14.03.2018 в 20:06.
alexzk вне форума Ответить с цитированием
Старый 14.03.2018, 20:31   #17
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Никак
Так с мета-програмированием (шаблоны в С++) вроде ж что угодно сделать можно при желании )
Ну если они там полностью реализованы.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.03.2018, 21:06   #18
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Так с мета-програмированием (шаблоны в С++) вроде ж что угодно сделать можно при желании )
Ну если они там полностью реализованы.
Ему хочется лямбдов. Какая разница, как описывать внешнюю ф. с параметрами - шаблоном или нет. Она все равно останется внешней и не будет иметь прямого доступа к лок. переменным другой функции.
alexzk вне форума Ответить с цитированием
Старый 14.03.2018, 21:33   #19
Avazart
Форумчанин
 
Аватар для Avazart
 
Регистрация: 13.08.2011
Сообщений: 184
По умолчанию

Всегда можно передать локальный объект во внешнюю ф-цию по ссылки или указателю, про это речь.

Цитата:
Никак. Локальные функции в С++ не допустимы.
Зато допустимы локальные классы.

Цитата:
Сообщение от alexzk Посмотреть сообщение
Или лямбд, начиная со стандарта 11го года. Других способов нет.
Через классы, но выглядеть будет по объемнее, лямбды в принципе так и работают.

Код:
#include <iostream>
using namespace std;



int main() 
{
    int c= 5;
    int b= 2;
    
    // Вместо локальной функции.
    struct Sub1
    { 
      Sub1(int& c, const int& b):c(c),b(b){};  	
      void operator()(void){c-=b; ++c;} 
      private:
         int &c;
         const int &b;
    };
    Sub1 sub1(c,b);
    
    sub1();
    
    std::cout << c <<" "<< b <<std::endl;
return 0;
}
https://ideone.com/CHeX06

Последний раз редактировалось Avazart; 14.03.2018 в 21:53.
Avazart вне форума Ответить с цитированием
Старый 14.03.2018, 21:39   #20
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Ему хочется лямбдов. Какая разница, как описывать внешнюю ф. с параметрами - шаблоном или нет. Она все равно останется внешней и не будет иметь прямого доступа к лок. переменным другой функции.
Так я ж про мета-программирование и прочую магию. В Бусте ж вроде было что-то типа лямбд до С++11.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку: *.exe вызвал срабатывание точки останова Gretchem Waide Помощь студентам 2 04.11.2014 18:02
OllyDbg при срабатывани точки останова окно крэкми вызвать помогите пожалуста! Dimka-novitsek Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 11.04.2014 18:57
Debug, Отладка завершает программу после точки останова 3betmebabyImFamous Общие вопросы по Java, Java SE, Kotlin 0 09.08.2012 15:41
[РЕШЕНО] не работают точки останова VVkSoft Общие вопросы Delphi 9 31.10.2011 15:16
Точки останова Spot Общие вопросы Delphi 8 24.07.2010 19:56