Учитывая этот фрагмент кода:
struct My {
operator const char*()const{ return "my"; }
} my;
CStringA s( "aha" );
printf("%s %s", s, my );
// another variadic function to get rid of comments about printf :)
void foo( int i, ... ) {
va_list vars;
va_start(vars, i);
for( const char* p = va_arg(vars,const char*)
; p != NULL
; p=va_arg(vars,const char*) )
{
std::cout << p << std::endl;
}
va_end(vars);
}
foo( 1, s, my );
Этот фрагмент приводит к «интуитивному» выводу «ага». Но я понятия не имею, как это может работать:
CStringA *
, который интерпретируется как const char *
оператор (const char *)
, почему бы ему этого не сделать для моего собственного класса? Может кто-нибудь объяснить это ?
РЕДАКТИРОВАТЬ: добавлена фиктивная функция с переменными числами, которая обрабатывает ее аргументы как const char *
s. Вот - он даже вылетает, когда достигает моего
аргумента ...