Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > безымянные переменные


Автор: GoldFinch 22.6.2009, 22:14
написал для синхронизации,
Код

class Synchronizer
{
public:
    Synchronizer(); // EnterCriticalSection()
    ~Synchronizer(); //LeaveCriticalSection()
...

все мне в нем нравится, но вот при использовании, надо писать-придумывать имя переменной
Код

T foo(...) {
    Synchronizer sinchronizeMePlease;
...
}


можно ли как-нибудь обойтись без явного задания переменной?

Автор: azesmcar 22.6.2009, 22:24
Создать можно, но это будет просто вызов конструктора и за ним последует вызов деструктора. Это не даст нужного эфекта.
Мне кажется надо думать в другом направлении. 

Автор: AnLun 22.6.2009, 22:25
А обязательно все реализовывать через конструктор\деструктор?
Просто статические функции нельзя написать?

Synchronizer в программе имеет один или несколько экземпляров?

Автор: azesmcar 22.6.2009, 22:27
Цитата(AnLun @  22.6.2009,  22:25 Найти цитируемый пост)
Просто статические функции нельзя написать?

Synchronizer в программе имеет один или несколько экземпляров? 

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

Автор: GoldFinch 22.6.2009, 22:46
AnLun, экземпляр допустим один, что значит использовать статические функции?

Автор: AnLun 22.6.2009, 23:09
Что-то вроде:
Код

#include <iostream>

class ap1
{
    private:
        static int _x; // статическая переменная

    public:
        ap1(){_x=1;}
        ~ap1(){_x=0;}
        static void p(){std::cout << _x;} // статическая функция
};

int ap1::_x=5;

int main()
{
    ap1::p();//вызов статической функции

    return 0;
}


PS прочитай про это где-нибудь...

Автор: GoldFinch 22.6.2009, 23:25
AnLun, и что это дает? мне какбэ надо чтобы при возврате из функции вызвался деструктор.
т.е. чтобы код
Код

#include <iostream>
class ap1
{
    public:
        ap1(){std::cout <<1;}
        ~ap1(){std::cout <<2;}
...
};
...

int main()
{
    ...
    std::cout <<"-";
}

вывел "1-2"

Автор: AnLun 22.6.2009, 23:29
А что нельзя написать так:
Код

class Synchronizer
{
public:
    static void start(); // EnterCriticalSection()
    static void end(); //LeaveCriticalSection()
...


Код

T foo(...) {
    Synchronizer::start(); //как бы конструктор
...
    Synchronizer::end(); //как бы деструктор
}


P.S. Скомпилируй мой код с ap1 - там конструктор и деструктор вообще не вызываются! 

Автор: mes 22.6.2009, 23:36
Цитата(AnLun @  22.6.2009,  22:29 Найти цитируемый пост)

P.S. Скомпилируй мой код с ap1 - там конструктор и деструктор вообще не вызываются! 

так человек автоматизации хочет, а Вы ему что подсовываете ? smile

Добавлено через 3 минуты и 37 секунд
Цитата(GoldFinch @  22.6.2009,  21:14 Найти цитируемый пост)
все мне в нем нравится, но вот при использовании, надо писать-придумывать имя переменной

на блок же одна такая переменная ? или проблема с именем даже в этом случае ?

Автор: AnLun 22.6.2009, 23:43
Цитата(mes @ 22.6.2009,  21:36)
Цитата(AnLun @  22.6.2009,  22:29 Найти цитируемый пост)

P.S. Скомпилируй мой код с ap1 - там конструктор и деструктор вообще не вызываются! 

так человек автоматизации хочет, а Вы ему что подсовываете ? smile

mes, не понял Вас smile 

Сорри, понял

Автор: GoldFinch 22.6.2009, 23:52
mes, мне просто не хочется ее писать. Конфликта имен наверное не будет ни при каких условиях, но мне както не нравится видеть переменную которая визуально "не используется". Может это просто дело привычки %)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)