2014年12月15日 星期一

C++中函式輸入泛型並型態轉換為enum / In C++ function generic parameter casting to enum / casting void* to enum


在C++中不能直接cast成 enum 但在C 中可以
如以下source code 在C中可以COMPILE過 
情況類似此篇文章 typdef enum void* 的用法請益

typedef enum {
     enum1
     enum2,
     enum3}
myenum;
void myfunc(void *data)
{
    if((myenum)data==enum1)
      ...
    else if ((myenum)data==enum2)
     ...
    else
     ...
}

但在C++中不行,所以myfunc作了以下修改
void myfunc(void *data)
{
    myenum* mydata=(myenum*) data;

    if((int)mydata==enum1)
      ...
    else if ((int)mydata==enum2)
     ...
    else
     ...
}
就可以了


個人覺得關鍵點應該是後面要再把mydata cast 為 int 這樣才不會出現enum 沒有operator = = 的錯誤...
(不然就是要自己寫customer operator了 囧)


也不知道這是不是正確做法,總之亂湊亂兜終於過了~~特此紀錄一下(灑花 

沒有留言:

張貼留言