К списку форумов К списку вопросов
(С++)Как сказать внутри ф-и о наличии переменных опред-х как аргументы в другой
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
или уже не интересно?

К списку вопросов на форуме Программирование

>>