Хочу следующее: если размер значения входит в указатель, то сохранить его в указатель void*, если большой, то выделить память и сохранять туда.
void* ptr = NULL;
bool is_ptr = false;
template< typename T >
void f(T& x)
{
if(sizeof(T) <= sizeof(void*)) {
ptr = (void*)x;
} else {
void* ptr = malloc(sizeof(T));
if(ptr) {
is_ptr = true;
memcpy(ptr, &x, sizeof(T));
}
}
}
Так компилируется
void main(){
int i = 1;
f(i);
}
А так нет
void main(){
double j = 2;
f(j);
}
error C2440: 'type cast' : cannot convert from 'double' to 'void *'
На красной строчке, но она никогда не выполнится.
Может как-то можно по другому обойти? MS VC 2008
В иделе хочется как-то препроцессор задействовать, чтобы лишнего if`а не стало.