- 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
#define TYPE_INIT_(_Number, _Line, _Type,...) struct ln_##_Line##_number_##_Number : public _Type\
{\
ln_##_Line##_number_##_Number()\
:_Type(__VA_ARGS__){}\
\
ln_##_Line##_number_##_Number(const _Type& _val)\
:_Type(_val){}\
\
const _Type& operator=(const _Type& _val)\
{\
((_Type)(*this)) = _val;\
return (*this);\
}\
}
#define TYPE_INIT(_Number, _Line, _Type,...) TYPE_INIT_(_Number, _Line, _Type, __VA_ARGS__)
#define INIT(_Type, ...) TYPE_INIT(__COUNTER__, __LINE__, _Type, __VA_ARGS__)
// использование
struct ABC
{
int A,B,C;
ABC(int _A,int _B,int _C)
:A(_A),
B(_B),
C(_C)
{}
};
struct TestClass
{
INIT( string, "Ololo" ) lv_String;
INIT( ABC, 1, 2, 3 ) lv_ABC;
};
LispGovno 20.04.2013 10:13 # +2
guest 30.04.2013 13:56 # +1
Мазохер?
bormand 20.04.2013 10:15 # +3
P.S. А ну да, понял, автор не знал о автосгенеренных операторах и решил запилить их сам через макроёбство. Печально, что тут сказать.
LispGovno 20.04.2013 10:17 # 0
bormand 20.04.2013 10:18 # 0
LispGovno 20.04.2013 10:20 # +1
http://www.gamedev.ru/code/tip/?id=6455
LispGovno 20.04.2013 10:22 # 0
>> Автор хочет, чтобы работало без С++11
> А где здесь С++11?
Автору не нужна подсказка, как заставить работать без С++11, а это и есть подсказка, как сделать, чтобы работало без С++11.)
bormand 20.04.2013 10:26 # +1
LispGovno 20.04.2013 10:26 # +1
> P.S. А ну да, понял, автор не знал о автосгенеренных операторах и решил запилить их сам через макроёбство. Печально, что тут сказать.
Не, ты не понял (или я). Члены класса же вроде нельзя так инициализировать до С++11.
То есть ABC lv_ABC(1, 2, 3); легально до С++11, а
struct TestClass
{
ABC lv_ABC(1, 2, 3);
уже нет (только после С++11 и включая).
bormand 20.04.2013 10:28 # +1
bormand 20.04.2013 10:31 # +1
А вот эта черная магия точно работает? Что-то мне кажется, что тут запиливают временный объект, в него загоняют новое значение, а члены класса при этом никак не меняются...
bormand 20.04.2013 10:36 # +2
Оператор присваивания неработоспособен.
roman-kashitsyn 20.04.2013 10:33 # +5
Автора жарить на сковородке до полного просветления.
bormand 20.04.2013 10:37 # +2
LispGovno 20.04.2013 10:52 # +3
Кланг поддерживает все С++11 фичи. И начал запиливать ещё непринятый С++14 о_О
govnomonad 20.04.2013 11:45 # +3
http://www.generic-programming.org/software/ConceptGCC/
И только один M$ тормозит
guest 20.04.2013 16:07 # +1
Помню давно кто-то постил ссылку на статью на английском (поэтому и не представляю как нагуглить), где были собраны несколько "правил хорошего тона" в программировании. Помню, там упоминались египетские скобки, йода-стайл присваивания и т.п. Кто помнит, дайте ссылку, пожалуйста.
scriptin 20.04.2013 23:04 # 0