您可以[非常接近]使用宏模拟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