c語言可以泛型程式設計嗎?

時間 2021-06-03 08:47:26

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 來說加個編譯期泛型應該不是什麼難事。當...