Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Автоматическая локальная переменная / 25 сообщений из 60, страница 1 из 3
24.07.2013, 15:35
    #38342352
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
Код: plaintext
1.
2.
3.
Chudo chudo;
void a() { chudo = 1; print(chudo); b(); print(chudo); }
void b() { chudo = 2; print(chudo); chudo++; print(chudo);  }



Результат работы
Код: plaintext
1.
1231



Возможно ли создание такого чудного класса на плюсах? Если да, то как?
...
Рейтинг: 0 / 0
24.07.2013, 15:56
    #38342397
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
Lumix,
Код: plaintext
1.
void b( Chudo chudo ) {...}

имхо, только так
...
Рейтинг: 0 / 0
24.07.2013, 16:38
    #38342492
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
egorychLumix,
Код: plaintext
1.
void b( Chudo chudo ) {...}

имхо, только так

По-моему вы не поняли задачу. Или я путанно объяснил. Посмотрите ещё раз на результат работы.

Может вот так понятнее будет.

Код: plaintext
1.
2.
3.
4.
class Chudo { ... } chudo;
void a() { chudo = 1; print(chudo); b(); print(chudo); }
void b() { chudo = 2; print(chudo); chudo++; print(chudo);  }
main() { a(); } // => 1231
...
Рейтинг: 0 / 0
24.07.2013, 16:43
    #38342501
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
LumixИли я путанно объяснил.
Ты вообще ничего не объяснил. Твой пример будет работать после модификации на ровно одно
слово:
Код: sql
1.
2.
3.
4.
class Chudo { ... } chudo;
void a() { chudo = 1; print(chudo); b(); print(chudo); }
void b() { Chudo chudo = 2; print(chudo); chudo++; print(chudo);  }
main() { a(); } // => 1231


Но ты как партизан молчишь почему тебе не хочется так сделать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.07.2013, 17:18
    #38342576
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
Dimitry SibiryakovНо ты как партизан молчишь почему тебе не хочется так сделать.


Тут дело не в партизанстве, а это задача такая. Создание объекта, который является глобальным, но ведет себя локально в зависимости от места использования.

Крейзи вариант этого задачи я пока не оглашаю, чтобы не нервировать людей, но наверное и так все догадались, что этот чудообъект нужен для рекурсивного алгоритма.
...
Рейтинг: 0 / 0
24.07.2013, 17:22
    #38342585
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
LumixТут дело не в партизанстве, а это задача такая. Создание объекта, который является глобальным, но ведет себя локально в зависимости от места использования.
Уволить к чертям того, кто такую задачу поставил.
...
Рейтинг: 0 / 0
24.07.2013, 17:34
    #38342607
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
Anatoly MoskovskyLumixТут дело не в партизанстве, а это задача такая. Создание объекта, который является глобальным, но ведет себя локально в зависимости от места использования.
Уволить к чертям того, кто такую задачу поставил.

...
Рейтинг: 0 / 0
24.07.2013, 17:46
    #38342637
?
?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
LumixВозможно ли создание такого чудного класса на плюсах? Если да, то как?Невозможно
...
Рейтинг: 0 / 0
24.07.2013, 18:06
    #38342690
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
LumixТут дело не в партизанстве, а это задача такая. Создание объекта, который является глобальным, но ведет себя локально в зависимости от места использования.

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

Оглашай крейзи вариант уже.

А то что значит, что "ведёт он себя локально" -- не ясно.
Также не забудь написать, что делает великолепная функция 'print'.
...
Рейтинг: 0 / 0
24.07.2013, 18:11
    #38342703
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
Переход через границу функции туда и сюда надо как-то отслеживать по-любому.
Это возможно, но автоматом это сделать не получится, надо создавать какой-то объект. После этого все остальные части задачи будут уже легкорешаемы.

Создание объекта можно будте завуалировать после этого в каких-то макросах.
типа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void foo()
{
   START_FUNCTION(foo);

   // код

   END_FUNCTION(foo);
}



При этом конечно же END_FUNCTION(foo); только для красоты, для функционала нужен только START_FUNCTION.
Имя тоже не нужно (оно есть в стандартных и не очень стандартных предопределённых макросах).
...
Рейтинг: 0 / 0
24.07.2013, 18:15
    #38342710
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
LumixМожет вот так понятнее будет.да я понял, чё тут было не понятного.

LumixСоздание объекта, который является глобальным, но ведет себя локально в зависимости от места использованиятакая задача не решается. Надо просто поменять её постановку, или описать изначальную задачу. Видимо, она как-то связана с вашими последними топиками в программировании, но сил нет додумывать её самостоятельно.
...
Рейтинг: 0 / 0
24.07.2013, 18:21
    #38342722
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
MasterZivПереход через границу функции туда и сюда надо как-то отслеживать по-любому.
Это возможно, но автоматом это сделать не получится, надо создавать какой-то объект. После этого все остальные части задачи будут уже легкорешаемы.



Ручной вариант уже рассматривали

Код: plaintext
1.
2.
void a() { uniqe i; chudo(i) = 1; print(chudo(i)); b(); print(chudo(i)); }
void b() { uniqe i; chudo(i) = 2; print(chudo(i)); chudo(i)++; print(chudo(i));  }



но с локальной переменной получается проще

Код: plaintext
1.
2.
void a() { Chudo chudo = 1; print(chudo); b(); print(chudo); }
void b() { Сhudo chudo = 2; print(chudo); chudo++; print(chudo);  }



MasterZivТакже не забудь написать, что делает великолепная функция 'print'.

В данном случае это абсолютно неважно, я просто привел её в качестве дампера, чтобы всем было понятно где на каком этапе какой значение.
...
Рейтинг: 0 / 0
24.07.2013, 18:24
    #38342729
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
egorychНадо просто поменять её постановку, или описать изначальную задачу. Видимо, она как-то связана с вашими последними топиками в программировании, но сил нет додумывать её самостоятельно.

Эта тема никак не связана с другими темами. Она сама по себе.
Я в принципе понимаю, ответ на мой вопрос: <b>нет</b>, но задал уж так может есть в плюсах какие-то глубокие фишки для таких случаев, тем более щас появился С++11 и я пока толком не знаю всей его глубины.
...
Рейтинг: 0 / 0
24.07.2013, 19:08
    #38342780
ДохтаР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
Lumix
Код: plaintext
1.
2.
3.
Chudo chudo;
void a() { chudo = 1; print(chudo); b(); print(chudo); }
void b() { chudo = 2; print(chudo); chudo++; print(chudo);  }



Результат работы
Код: plaintext
1.
1231



Возможно ли создание такого чудного класса на плюсах? Если да, то как?


гуглить
operator=(....);
operator int();

Но с принтЭфом и прочими функциями с переменным количестом аргументов
без явного приведения к типу ИМХО(вроде не приснилось) работать не будет.
...
Рейтинг: 0 / 0
24.07.2013, 19:10
    #38342783
ДохтаР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
LumixЯ в принципе понимаю, ответ на мой вопрос: <b>нет</b>, но задал уж так может есть в плюсах какие-то глубокие фишки для таких случаев, тем более щас появился С++11 и я пока толком не знаю всей его глубины.

ответ да ,
но с определенным количество нетривиальных ограничений .
...
Рейтинг: 0 / 0
24.07.2013, 19:16
    #38342789
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
ДохтаР,

Операторы никакие не помогут, тут надо ловить переход через границу функции, это надо каких-то акторов или
CLOS pre- post- методов.
В С++ этого нет.
...
Рейтинг: 0 / 0
24.07.2013, 20:48
    #38342869
pre-post
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
Lumix,

pre/post можно добавить как-нибудь так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
class Chudo
{
public:
    begin_level() {/*whatever to begin level*/};
    end_level() {/*whatever to end level*/};
};

class Level
{
    Chudo &_chudo;

public:
    Level(Chudo &chudo) : _chudo(chudo){ _chudo.begin_level();}
    ~Level() { _chudo.end_level();}
}

Chudo chudo;
a() { Level(chudo); bla-bla-bla;}
b() { Level(chudo); bla-bla-bla; a(); bla-bla-bla; }

void main()
{
    b();
}
...
Рейтинг: 0 / 0
24.07.2013, 21:30
    #38342893
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
pre-post,

имхо те же яйца только сбоку. Получается, что единственный инструмент "из коробки" для таких случае это только локальная переменная.

Видимо для таких целей была придумана шняга под названием аспектно-ориентированное программирование, но что-то она больно мозги в трубочку сворачивает.
...
Рейтинг: 0 / 0
24.07.2013, 22:12
    #38342922
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
Чего-то я никак не пойму. А зачем это все?
Можно более-менее реальный пример когда подобные трюки могут быть полезны?
...
Рейтинг: 0 / 0
24.07.2013, 22:21
    #38342927
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
White OwlЧего-то я никак не пойму. А зачем это все?
Можно более-менее реальный пример когда подобные трюки могут быть полезны?

На этом форуме очень много реально и нереально крутых спецов. Но к сожалению, есть ещё дохера всяких школотроллей, которые как мошки на болоте облепляют. Поэтому когда у меня возникает желание обратится к крутым спецам по какому-то вопросу, то я стараюсь из всей задачи выделить только самую-самую суть, сформулировать её в виде самой самой маленькой какой только возможно маленькой формы, чтобы у тролломошек просто не хватло бы за что можно уцепиться.

Например, по вопросу заданному в этой теме крутые спецы посмотрели и сказали, что автоподкапотных шняг тут замутить не получится. Мне этого вердикта достаточно и я благодарен им за то, что уделили время и свою квалификацию. Теперь я буду знать, что ничего кроме локальной переменной в данном случае не поможет и что локальная переменная это единственный "автоматический" механизм маркирования атомарных подпространств.

В реальном проекте принято решение остановиться на вариенте с автоуниками, которые маркируют подпространства, то есть тот пример, где я показал chudo(i) = 1, chudo(i)++, chudo(i).func(), ...

Ещё раз спасибо всем, кто отписался в теме.
...
Рейтинг: 0 / 0
24.07.2013, 23:07
    #38342951
Малыхин Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
[quo]сформулировать её[/quot] в этом основная проблема на мой взгляд ))
...
Рейтинг: 0 / 0
24.07.2013, 23:09
    #38342953
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
LumixВ реальном проекте
такой херью не стадают
...
Рейтинг: 0 / 0
25.07.2013, 05:37
    #38343083
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
LumixТут дело не в партизанстве, а это задача такая. Создание объекта, который является глобальным, но ведет себя локально в зависимости от места использования.Глобально какой нужен функционал?
Получаем доступ ко всем локальным объектам:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
#include <iostream>
#include <vector>

using namespace std;

class Chudo
{
protected:
    int val;
    static vector<Chudo *> locals;

public:
    Chudo()
    {
        locals.push_back(this);
        val=-1;
    }

    ~Chudo()
    {
        locals.pop_back();
    }

    void operator++ ()
    {
        ++val;
    }

    void print()
    {
        cout<<val<<endl;
    }

    void operator= (int v)
    {
        val=v;
    }

    void print_locals()
    {
        for(unsigned int i=0; i<locals.size(); i++)
        {
            cout<<"local_"<<i<<" = "<<locals[i]->val<<endl;
        }
    }
};
vector<Chudo *> Chudo::locals;

void b()
{ Chudo c,d; c=2; c.print(); ++c; c.print(); c.print_locals(); }
void a()
{ Chudo c,d; c=1; c.print(); c.print_locals(); b(); c.print(); c.print_locals(); }

int main()
{
    a();
    return 0;
}

...
Рейтинг: 0 / 0
25.07.2013, 09:44
    #38343210
?
?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
Lumix, Почему собственно "локальная" подразумевается на уровне функции? В С++ концепция локальности несколько шире.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
main() 
{
  int i = 1;
  std::cout << i;
  { 
    int  i = 2;
    std::cout << i;
  }
  std::cout << i;
}
...
Рейтинг: 0 / 0
25.07.2013, 11:06
    #38343345
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автоматическая локальная переменная
Малыхин Сергей[quo]сформулировать её в этом основная проблема на мой взгляд ))[/quot]

Проблема не в том, чтобы сформулировать задачу, а в том, чтобы сформулировать её troll-safe. Например, даже при формулировании такой малюсенькой задачки, некоторые персонажи подумали, что это задача про перегрузку операторов и стали активно отвлекать внимание именно на этом аспекте.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Автоматическая локальная переменная / 25 сообщений из 60, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]