![]() |
![]() |
AI 30.03.2004 - 11:26 |
допустим есть функция void B() { } и есть функция void A(int &a1,int &a2) { // в ней вызываекться функция B() B(); } как мне можно получить доступ к аргументам функции A не передавая их в качестве аргументов для B() ? в итоге я бы хотел в теле функции B() работать с ними. |
UE 1 - 30.03.2004 - 11:31 |
Красивого решения нет. Некрасиво - только стек смотреть. |
VaS 2 - 30.03.2004 - 11:36 | Локальных функций в С++ нет. Сохраняй значения аргументов в поля класса / глобальные переменные и используй в B(). Первое проблематично в случае многопоточности. Будет лишний расход памяти, что критично при большом количестве экземпляров этого класса (например при числе 1млн. будет нужно ~8М памяти неизвестно на что). Так что как всегда - или быстро, или экономно :) |
LF 3 - 30.03.2004 - 11:43 |
Нормального рещения нет, надо юзать вложенные и локальные классы. время жизни локальных переменных может варьироваться (т.е. они конструируются позже, а деструируются раньше). Следовательно, к "россыпи" локальных переменных невозможно заведомо правильно обращаться. А к единичному (составному) объекту - пожалуйста. Время жизни будет равно области его видимости. Наиболее компактно - сделать локальные функции методами объекта, инкапсулирующего контекст, например void Outer(int a, float b) { struct Outer // struct - чтобы все члены были public по умолчанию { // сомнительная идея давать структуре то же имя, что и функции, но язык позволяет... int x; std::string y; void Inner1(const char* c) // в функцию неявно передается указатель на экземпляр: this { y += c; } void Inner2(float d) { x += d; Inner1("hello"); } } _; // такое простое имя, чтобы меньше возни было _.x = a * b; _.y = "test"; _.Inner1("world"); _.Inner2(1.23); } |
Kabbalah 4 - 30.03.2004 - 17:50 |
AI, поконкретнее сформулируй для чего это нужно? Если для того чтобы кучу аргументов по всему коду не затаскать, то инкапсулируй их в один класс и юзай его по ссылкам. |
ВО ДОСТАЛИ! 5 - 30.03.2004 - 20:26 |
-Как извратиться так, -Как извратиться этак... Ну сколько можно? Где элементарные правила хорошего проектирования? Вот после таких экспериментов C++ и называют "плохим" языком... |
Sabrian 6 - 02.04.2004 - 12:28 | Up: Полностью солидарен! |
AI 7 - 02.04.2004 - 12:31 | вопрос уже не актуален сохраняю аргументы в перееные класса |
lesha 8 - 07.04.2004 - 23:09 |
можно еще с помощью boost::phoenix::closure или уже не интересно? |