- 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
/*
* The use of singletons for globals makes globals not
* actually be initialized until it is first needed, this
* makes the library faster to load, and have a smaller
* memory footprint
*/
#define json_global_decl(TYPE, NAME, VALUE) \
class jsonSingleton ## NAME { \
public: \
inline static TYPE & getValue() json_nothrow { \
static jsonSingleton ## NAME single; \
return single.val; \
} \
protected: \
inline jsonSingleton ## NAME() json_nothrow : val(VALUE) {} \
TYPE val; \
}
#define json_global(NAME) jsonSingleton ## NAME::getValue() \
json_global_decl(json_string, CONST_TRUE, JSON_TEXT("true"));
json_global_decl(json_string, CONST_FALSE, JSON_TEXT("false"));
json_global_decl(json_string, CONST_NULL, JSON_TEXT("null"));
/* Использование */
json_global(ERROR_NULL_IN_CHILDREN)
Psionic 10.12.2012 00:50 # 0
LispGovno 10.12.2012 01:02 # 0
Надоело писать зеленым цветом.
myaut 10.12.2012 09:26 # +4
roman-kashitsyn 10.12.2012 11:46 # 0
defecate-plusplus 10.12.2012 12:18 # +3
собственно любой метод, имеющий тело прямо внутри класса - уже inline, независимо от того, статический он или нет
просто некоторые старые компиляторы в этом не уверены (да, Тарас?)
roman-kashitsyn 10.12.2012 12:21 # 0
Да это я знаю, на крестах недавно говнявкать потихоньку начал.
Мне не ясно, как сочетается объявление статического члена, который должен быть синглетоном (майерсовким), с inline-методом, который будет встраиваться во все места, где используется.
defecate-plusplus 10.12.2012 12:33 # +5
inline означает inline linkage - все инлайновые методы попадают в отдельное место в объектном модуле, и т.к. модулей при линковке, имеющих одни и те же методы, будет несколько (логично, т.к. инлайновые методы обычно попадают в единицу трансляции через хедеры), линкер создаст из них всех одну (1) точку входа в каждый метод (если таковой метод вообще будет нужен как отдельная сущность)
roman-kashitsyn 10.12.2012 12:50 # +1
LispGovno 10.12.2012 23:54 # −3
absolut 13.12.2012 10:41 # 0
Мне почему-то сразу вспомнилось про extern template. Вроде в C++11 должно?
defecate-plusplus 13.12.2012 12:06 # +1
в отличие от нормального списка экспорта объектного модуля, где дубли будут считаться ошибкой (symbol/function XXX already defined in other.o)
> extern template
ну поглядим как это будет работать на самом деле
TarasB 11.12.2012 11:05 # 0
govnomonad 13.12.2012 13:04 # 0
TarasB 13.12.2012 13:37 # +1
Рано утром я встану в очередь в Мавзолей.
absolut 13.12.2012 13:49 # 0
TarasB 13.12.2012 15:54 # 0