1樓:鄒佳慶
泛型最強大的語言應該是D語言,然後 DLang 還有乙個 BetterC 模式,這個模式可以說是 C 語言的乙個增強,很多開源作者推薦大家使用 D 替代 C 就是因為這個 BetterC 的存在,當然完整的 DLang 功能更強大,可以體驗。
話說回來巨集定義在除錯的時候不是很友好,推薦嘗試D。
2樓:潛水鰻魚
可以用巨集強行實現(當然最好的方法還是換個語言...),下面實現乙個pair來說一下我常用的玩法:
① 試著實現乙個簡單的pair
#include
#define Pair(T1, T2, ...) Pair$_##T1##_$$_##T2##_$##__VA_ARGS__
#define Pair_Def(T1, T2) \
typedef struct Pair(T1, T2) Pair(T1, T2); \
struct Pair(T1, T2)
typedef
const
char
*Str
;Pair_Def
(int
,char
);Pair_Def
(Str
,float
);int
main
()② 嘗試新增建構函式
#include
#define Pair(T1, T2, ...) Pair$_##T1##_$$_##T2##_$##__VA_ARGS__
#define Pair_Def(T1, T2) \
typedef struct Pair(T1, T2) Pair(T1, T2); \
struct Pair(T1, T2) ; \
\void Pair(T1, T2, Init)( \
Pair(T1, T2)* _this, \
T1 t1, \
T2 t2) \
typedef
const
char
*Str
;Pair_Def
(int
,char
);Pair_Def
(Str
,float
);int
main
()③ 加個靜態的成員函式
#include
#define Pair(T1, T2, ...) Pair$_##T1##_$$_##T2##_$##__VA_ARGS__
#define Pair_Def(T1, T2) \
typedef struct Pair(T1, T2) Pair(T1, T2); \
struct Pair(T1, T2) ; \
\void Pair(T1, T2, PrintType)(void) \
\void Pair(T1, T2, Init)( \
Pair(T1, T2)* _this, \
T1 t1, \
T2 t2) \
typedef
const
char
*Str
;Pair_Def
(int
,char
);Pair_Def
(Str
,float
);int
main
()④ 加個非靜態的成員函式(必須得傳入this指標的)
#include
#define Pair(T1, T2, ...) Pair$_##T1##_$$_##T2##_$##__VA_ARGS__
#define Pair_Def(T1, T2) \
typedef struct Pair(T1, T2) Pair(T1, T2); \
struct Pair(T1, T2) ; \
\void Pair(T1, T2, PrintType)(void) \
\void Pair(T1, T2, Init)( \
Pair(T1, T2)* _this, \
void (*Pair(T1, T2, PrintVal))(const Pair(T1, T2)*), \
T1 t1, \
T2 t2) \
typedef
const
char
*Str
;Pair_Def
(int
,char
);Pair_Def
(Str
,float
);void
Pair
(int
,char
,PrintVal
)(const
Pair
(int
,char)*
_this
)void
Pair
(Str
,float
,PrintVal
)(const
Pair
(Str
,float)*
_this
)int
main
()⑤ 考慮到多檔案擴充套件 /* 2020.04.13 修改 */
pair_template.h
/* pair_template.h */
#ifndef __PAIR_TEMPLATE_H__
#define __PAIR_TEMPLATE_H__
#include
#define Pair(T1, T2, ...) Pair$_##T1##_$$_##T2##_$##__VA_ARGS__
// declaration
#define Pair_Decl(T1, T2) \
typedef struct Pair(T1, T2) Pair(T1, T2); \
struct Pair(T1, T2) ; \
\void Pair(T1, T2, Init)( \
Pair(T1, T2)* _this, \
T1 t1, \
T2 t2)
// definition
#define Pair_Def(T1, T2) \
static void Pair(T1, T2, PrintType)(void) \
\void Pair(T1, T2, Init)( \
Pair(T1, T2)* _this, \
T1 t1, \
T2 t2) \
#endif
pair.h
/* pair.h */
#ifndef __PAIR_H__
#define __PAIR_H__
#include "pair_template.h"
typedef const char* Str;
Pair_Decl(int, char);
Pair_Decl(Str, float);
#endif
pair.c
/* pair.c */
#include
"pair.h"
static
void
Pair
(int
,char
,PrintVal
)(const
Pair
(int
,char)*
_this
)static
void
Pair
(Str
,float
,PrintVal
)(const
Pair
(Str
,float)*
_this
)Pair_Def
(int
,char
);Pair_Def
(Str
,float
);main.c
/* main.c */
#include
"pair.h"
intmain
()請叫我巨集孩兒w(Д)w
自學程式設計 c語言 可能嗎?
fl.ush 太可能啦,我自學了4門語言,從事程式設計工作十年了。我經歷了從小學到大學堅持不懈的學程式設計,而且什麼都沒有學會,因為沒人教。但是那些日子的空想,讓我後來的學習變得更有效率。只要努力了,總會離目標做來越近! wy1998 zh 先設定學習的目標,然後認清自己的基礎,對照知乎上的學習書籍...
學完C語言可以做程式設計類工作嗎?
書生意氣 可以呀,工作種類還挺多的。可以教小學生入門,可以開發微控制器或嵌入式裝置,開發個性化的系統教材,現在中小學生玩機械人物聯網挺火的。各種中小學生科技競賽 教育科技公司了解一下。 Marlboro 只是c學的過關 語言特性 底層的理解 tcpip 演算法資料結構都過關 是肯定不行的,至少至少你...
Go 語言加入泛型的可能性大嗎?
馬甲 已經在行動了.Go 2.0大概率會有泛型,由Go Team的 Ian Taylor負責 來自 Rob Pike的專訪 苟投雄 Robert 是這個東西嗎?還有bug,等吧. 不遠的將來還是有可能的,泛型從技術上來講可以分為編譯期泛型和執行期泛型,對 go 來說加個編譯期泛型應該不是什麼難事。當...