h**********c 发帖数: 4120 | 1 Try to figure it out but failed,as the following:
void takefloat (float * ) {}
void takedouble (double *) {}
template
void dosomething (T * pt)
{
#if sizeof(T) == sizeof(float)
takefloat (pt);
#else
takedouble(pt);
#endif
}
Compilation failed. |
A**u 发帖数: 2458 | 2 我觉得,你这个不行的原因在
#if sizeof(T) == sizeof(float)
sizeof(T)要运行时才知道
你改成
#if XXX
#else
#endif
编译时候加上 g++ -DXXX 选择float, g++ 选择double
或者
你改成void take (float * ) {}
void take (double *) {}
template
void dosomething (T * pt)
{
take(pt);
}
这样可行吗
【在 h**********c 的大作中提到】 : Try to figure it out but failed,as the following: : void takefloat (float * ) {} : void takedouble (double *) {} : template : void dosomething (T * pt) : { : #if sizeof(T) == sizeof(float) : takefloat (pt); : #else : takedouble(pt);
|
h*******s 发帖数: 8454 | 3 好像这样就可以了
怎么还用#来注释啊。。。
takefloat ((float *)pt);
takedouble((double *)pt);
【在 h**********c 的大作中提到】 : Try to figure it out but failed,as the following: : void takefloat (float * ) {} : void takedouble (double *) {} : template : void dosomething (T * pt) : { : #if sizeof(T) == sizeof(float) : takefloat (pt); : #else : takedouble(pt);
|
t****t 发帖数: 6806 | 4 for metaprogramming, there is no "if". condition is always implicit. for
your example (as a simple function), you should write:
void dosomething(float* pt) { takefloat(pt); }
template void dosomething(T* pt) { takedouble(pt); }
although you may really want to write
void dosomething(float* pt) { takefloat(pt); }
void dosomething(double* pt) { takedouble(pt); }
【在 h**********c 的大作中提到】 : Try to figure it out but failed,as the following: : void takefloat (float * ) {} : void takedouble (double *) {} : template : void dosomething (T * pt) : { : #if sizeof(T) == sizeof(float) : takefloat (pt); : #else : takedouble(pt);
|
h**********c 发帖数: 4120 | 5 Try to figure it out but failed,as the following:
void takefloat (float * ) {}
void takedouble (double *) {}
template
void dosomething (T * pt)
{
#if sizeof(T) == sizeof(float)
takefloat (pt);
#else
takedouble(pt);
#endif
}
Compilation failed. |
A**u 发帖数: 2458 | 6 我觉得,你这个不行的原因在
#if sizeof(T) == sizeof(float)
sizeof(T)要运行时才知道
你改成
#if XXX
#else
#endif
编译时候加上 g++ -DXXX 选择float, g++ 选择double
或者
你改成void take (float * ) {}
void take (double *) {}
template
void dosomething (T * pt)
{
take(pt);
}
这样可行吗
【在 h**********c 的大作中提到】 : Try to figure it out but failed,as the following: : void takefloat (float * ) {} : void takedouble (double *) {} : template : void dosomething (T * pt) : { : #if sizeof(T) == sizeof(float) : takefloat (pt); : #else : takedouble(pt);
|
h*******s 发帖数: 8454 | 7 好像这样就可以了
怎么还用#来注释啊。。。
takefloat ((float *)pt);
takedouble((double *)pt);
【在 h**********c 的大作中提到】 : Try to figure it out but failed,as the following: : void takefloat (float * ) {} : void takedouble (double *) {} : template : void dosomething (T * pt) : { : #if sizeof(T) == sizeof(float) : takefloat (pt); : #else : takedouble(pt);
|
t****t 发帖数: 6806 | 8 for metaprogramming, there is no "if". condition is always implicit. for
your example (as a simple function), you should write:
void dosomething(float* pt) { takefloat(pt); }
template void dosomething(T* pt) { takedouble(pt); }
although you may really want to write
void dosomething(float* pt) { takefloat(pt); }
void dosomething(double* pt) { takedouble(pt); }
【在 h**********c 的大作中提到】 : Try to figure it out but failed,as the following: : void takefloat (float * ) {} : void takedouble (double *) {} : template : void dosomething (T * pt) : { : #if sizeof(T) == sizeof(float) : takefloat (pt); : #else : takedouble(pt);
|
h**********c 发帖数: 4120 | 9 Thanks!
Overload take(...) may save some time. |