История изменений
Исправление
AIv,
(текущая версия)
:
class my_special_object{
...
my_special_object( const char* S);
...
template<typename T> my_special_object& operator , (const T& other){
...
return *this;
}
};
#define WOUT(args...){ \
my_special_object _tmp_special_object( #args ); \
_tmp_special_object,args; \
}
...
int a = 2; const char*b = "qwerty";
WOUT( a*2, b+1 );
если конструктор разбирает входящую строку по токенам разделенным запятыми (с учетом скобок), и оп. запятая берет очередной токен и выводит аргумент, то получаем на выходе че нить вроде:
a*2=4; b="werty";
Аналогично делается фича, позволяющая описывать например поля структуры (получать имя поля, тип, смещение, размер массива если поле массив и пр.) и потом это где нить юзать. При этом перегрузка запятой стреляет только если первым аргументом идет специально для нее сделанный объект.
Исходная версия
AIv,
:
class my_special_object{
...
my_special_object( const char* S);
...
template<typename T> my_special_object& operator , (const T& other){
...
return *this;
}
};
#define WOUT(args...)
WOUT( args... ) {
my_special_object _tmp_special_object( #args );
_tmp_special_object,args;
}
...
int a = 2; const char*b = "qwerty";
WOUT( a*2, b+1 );
если конструктор разбирает входящую строку по токенам разделенным запятыми (с учетом скобок), и оп. запятая берет очередной токен и выводит аргумент, то получаем на выходе че нить вроде:
a*2=4; b="werty";
Аналогично делается фича, позволяющая описывать например поля структуры (получать имя поля, тип, смещение, размер массива если поле массив и пр.) и потом это где нить юзать. При этом перегрузка запятой стреляет только если первым аргументом идет специально для нее сделанный объект.