我目前正在製作一個小型庫,它可以訪問random.org並獲得隨機字符串或整數。儘管我已經遇到了一個小問題,但是設計明智,而且我無法決定哪兩種方法最好,所以我會寫下我關於兩者的想法,並提出我認爲與兩者都相關的問題。如何從void指針返回一個類型的指針,當類型已知
我現在有這樣一個結構:
typedef struct {
char **array;
size_t row;
size_t col;
size_t size;
} MemoryStruct;
這是我的「問題」的來源,因爲我現在已經在整數處理到我的圖書館加入。
可以看出,指針當前是一個字符指針,因爲我希望能夠處理污點整數和字符,我應該添加另一個指針 - 一個整數指針 - 或者我應該使它成爲一個空指針並使一個函數,將返回正確的指針類型?
增加一個整數指針將是最簡單的,但我不確定在未來的某個時間點可能會使用我的庫的人有多明顯,這就是他的程序出現故障的原因,因爲他在結構中使用了錯誤的指針。
然而,添加一個void指針意味着我將不得不做一個基於上下文的函數,它將返回一個正確類型的指針(如果這甚至可能 - 我真的不知道它是否是) ,這導致了這樣的問題:
哪個返回類型可以返回不同種類的指針的函數? (......很明顯,是一個無效的指針!)但是我仍然沒有將想要的類型包括在內以方便使用我的庫的程序員 - 這是將它放入僞代碼中,我想要做什麼。
pointer-with-type-info *fun(MemoryStruct *memory, RandomSession *session)
switch case on session->type
return pointer of appropriate type
它應該加在這裏,從session-> type可以推斷出指針應該是哪個類型。
非常感謝您閱讀本文。
是否可以使用C++和模板,還是僅限於使用C? – spartygw
我寧願將它保留在C中,因爲我對此更加適應,而不是進入C++和模板。 –
那麼你堅持使用void * –