+19
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
??=include <iostream>
template <typename T> class TSingleton: public T
??<
public:
static T& instance(void)
??<
static T instance;
return instance;
??>;
??>;
class TOscillStatisticko
??<
protected:
TOscillStatisticko(void):_countNewInSmallPool(0), _countDeleteInSmallPool(0) ??<??>;
friend class TSingleton <TOscillStatisticko>;
private:
int _countNewInSmallPool;
int _countDeleteInSmallPool;
public:
void addCountNewInSmallPool(void)
??<
_countNewInSmallPool++;
??>
int countNewInSmallPool(void)
??<
return _countNewInSmallPool;
??>
??>;
typedef TSingleton <TOscillStatisticko> TOscillStatistic;
int main()
??<
TOscillStatistic::instance().addCountNewInSmallPool();
std::cout<<TOscillStatistic::instance().countNewInSmallPool()<<std::endl;
std::cout<<"ko"<<std::endl;
??>
http://ideone.com/dt9L9
Ладно, раз уж я так палюсь, то придется признаться: у меня просто сломалась клавиатура, потому сегодня пришлось написать немного странно...
Так вот вопрос:, почему, если закомментировать строку
friend class TSingleton <TOscillStatisticko>;
http://ideone.com/4WBGh
Запостил: HaskellGovno,
20 Августа 2012
HaskellGovno 20.08.2012 16:35 # −2
(Это продолжение не законченного вопроса)
govnomonad 20.08.2012 16:40 # +3
psina-from-ua 20.08.2012 16:41 # +3
??> eq }
??= eq #
etc
bormand 20.08.2012 16:50 # +3
http://alenacpp.blogspot.com/2006/02/blog-post.html
HaskellGovno 20.08.2012 17:03 # −3
Вообщем, почему без френдения этот код не компилируется? он ведь должен, тк конструктор TOscillStatisticko protected и проблем быть не должно. Он должен быть виден в TSingleton::instance
bormand 20.08.2012 17:06 # +2
> конструктор TOscillStatisticko protected
Внимательно читаем в мане, кому именно доступны protected члены, и больше не задаем тупых вопросов.
HaskellGovno 20.08.2012 17:08 # −2
bormand 20.08.2012 17:10 # +1
ЩИТО? Как этот самозванец посмел назваться потомком TOscillStatisticko.
HaskellGovno 20.08.2012 17:16 # −2
bormand 20.08.2012 17:22 # +3
Except when forming a pointer to member (5.3.1), the access must be through a pointer to, reference to, or object of the derived class itself (or any class derived from that class) (5.2.5).
HaskellGovno 20.08.2012 21:04 # −2
bormand 20.08.2012 21:06 # +3
- Открываем его
- Ищем в содержании нужный раздел
- Читаем
- ?????
- Профит
HaskellGovno 20.08.2012 21:14 # −1
Но для начала задам вопрос попроще:
Где найти абсолютно финальный стандарт С++11 (не черновики, доступные каждому за бесплатно). Я знаю что его нужно покупать у комитета стандартизации, но может кто знает торрент или что-то подобное, чтобы это было за бесплатно? С моих школьных завтраков столько не накопить... Мне вон щас на клаву придется и без того копить.
bormand 20.08.2012 21:29 # +3
HaskellGovno 20.08.2012 22:02 # −2
defecate-plusplus 20.08.2012 17:23 # +2
http://ideone.com/38T7a
HaskellGovno 20.08.2012 17:41 # −2
defecate-plusplus
Спасибо друзья. Я осознал свою ошибку. Я так больше не буду. :-(
Жаль, что так делать нельзя...
То есть к protected членам можно обратиться только через this и типа того и больше никак.
bormand 20.08.2012 17:50 # +2
P.S. См. код BizarreSingleton ниже.
HaskellGovno 20.08.2012 22:06 # −1
defecate-plusplus 20.08.2012 22:22 # +3
только доза делает лекарство ядом и яд лекарством
HaskellGovno 20.08.2012 22:29 # −3
defecate-plusplus 20.08.2012 23:30 # +2
а для случаев "мне лениво передавать ссылку на этот объект в 0-5-10-30% создаваемых других объектов, пускай он будет глобальной переменной, ой, в смысле, синглтоном" - ну тут надо принимать во внимание фактор лени, конечно, но обычно всё неплохо кодится и без таких синглтонов
мне видится проблема из ОП как раз вторым случаем (какой-то сбор статистики, пф, еще запрет на переопределение operator = в потомке от этой статистики - задача первой важности, да)
defecate-plusplus 20.08.2012 17:51 # +3
http://ideone.com/qmyao
чорт, борманд уже накинул раньше
HaskellGovno 20.08.2012 21:20 # −2
bormand 20.08.2012 17:48 # +2
http://ideone.com/sDbbE
HaskellGovno 20.08.2012 18:32 # −2
Я sosnuley... :(
HaskellGovno 20.08.2012 19:05 # 0
У меня получилось 2 финальных варианта:
http://ideone.com/bPjsF
HaskellGovno 20.08.2012 19:05 # 0
Из второго мне не удалось убрать friend, хотя мне он нравится больше. Есть идеи, как убрать френда из второго варианта?
А вообще реально спасибо, идея была реально гениальная bormand!
bormand 20.08.2012 19:30 # +1
В первом варианте обезфренживание имело смысл в том случае, если класс создан не нами, и не хочется\нельзя его править, но синглтон нужен.
Во втором варианте класс зависит от синглтона, и т.к. мы уже впилили в его заголовок наследование, френда добавить никаких проблем не составит.
HaskellGovno 20.08.2012 21:17 # 0
sayidandrtfm 20.08.2012 16:58 # +3
http://med-magazin.com.ua/item_N829.htm явно поверку давно не проходил.
byss 21.08.2012 10:01 # +5