- 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;
};
Мазохер?
P.S. А ну да, понял, автор не знал о автосгенеренных операторах и решил запилить их сам через макроёбство. Печально, что тут сказать.
http://www.gamedev.ru/code/tip/?id=6455
>> Автор хочет, чтобы работало без С++11
> А где здесь С++11?
Автору не нужна подсказка, как заставить работать без С++11, а это и есть подсказка, как сделать, чтобы работало без С++11.)
> P.S. А ну да, понял, автор не знал о автосгенеренных операторах и решил запилить их сам через макроёбство. Печально, что тут сказать.
Не, ты не понял (или я). Члены класса же вроде нельзя так инициализировать до С++11.
То есть ABC lv_ABC(1, 2, 3); легально до С++11, а
struct TestClass
{
ABC lv_ABC(1, 2, 3);
уже нет (только после С++11 и включая).
А вот эта черная магия точно работает? Что-то мне кажется, что тут запиливают временный объект, в него загоняют новое значение, а члены класса при этом никак не меняются...
Оператор присваивания неработоспособен.
Автора жарить на сковородке до полного просветления.
Кланг поддерживает все С++11 фичи. И начал запиливать ещё непринятый С++14 о_О
http://www.generic-programming.org/software/ConceptGCC/
И только один M$ тормозит
Помню давно кто-то постил ссылку на статью на английском (поэтому и не представляю как нагуглить), где были собраны несколько "правил хорошего тона" в программировании. Помню, там упоминались египетские скобки, йода-стайл присваивания и т.п. Кто помнит, дайте ссылку, пожалуйста.