您可以[非常接近]使用宏模擬C語言中的C++模板。
至少有兩種方法可以做到這一點。
第一種方法: 「橡皮圖章」 宏
定義聲明/定義宏爲你的函數
#define DECLARE_READ_WRITE(suffix, type)\
type Read_Value_##suffix(void);
void Write_Value_##suffix(type val);
#define DEFINE_READ_WRITE(suffix, type)\
type Read_Value_##suffix(void) {\
/* your code */ \
}\
void Write_Value_##suffix(type val) {\
/* your code */ \
}
,然後在一些頭文件中做
DECLARE_READ_WRITE(long, long)
DECLARE_READ_WRITE(int, int)
並在一些實施文件
DEFINE_READ_WRITE(long, long)
DEFINE_READ_WRITE(int, int)
將 「生成」 爲Read_Value_int
,Write_Value_int
,Read_value_long
和Write_value_long
聲明和定義。
方法二:參數包括文件
創建兩個頭文件。一個用於聲明(read_write.h.template
)
TYPE__ CONCAT(Read_Value_, SUFFIX__)(void);
void CONCAT(Write_Value_, SUFFIX__)(TYPE__ val);
,一個用於定義(read_write.c.template
)
TYPE__ CONCAT(Read_Value_, SUFFIX__)(void)
{
/* your code */
}
void CONCAT(Write_Value_, SUFFIX__)(TYPE__ val)
{
/* your code */
}
這裏CONCAT
是一個通常的實現宏令牌級聯的(可以/應當在第一方法中使用爲好) 。
然後包括你的「模板」的代碼到一個適當的頭文件和執行文件
#define TYPE__ int
#define SUFFIX__ int
#include "read_write.h.template"
#undef TYPE__
#undef SUFFIX__
#define TYPE__ long
#define SUFFIX__ long
#include "read_write.h.template"
#undef TYPE__
#undef SUFFIX__
與read_write.c.template
頭部分實現文件同樣的事情。
後一種方法具有生成可調試代碼的附加好處。即您可以在調試器中單步執行它,就像它通常用於C++模板一樣。
來源
2012-07-09 15:18:31
AnT
多態性是C++的主要附加元素之一。這不是C的能力。 – trumpetlicks 2012-07-09 15:11:34