回 帖 发 新 帖 刷新版面

主题:[原创]难看的C风格模版函数和模版类「宏实现」

[color=006000]#include <string>
#include <iostream>
[/color]
[color=006000]#include <cassert>
[/color][color=0000FF]using[/color] [color=0000FF]namespace[/color] std[color=a46434];[/color]

[color=006080]// C风格的“函数模版”
[/color][color=006000]#define print(type) \
void print_##type(type value) {\
  cout << (type(value) + '1') << endl;\
}
[/color]
[color=006080]//类似,max的c风格模版函数可以写为:
[/color][color=006000]#define max(type) \
type max_##type(type v1, type v2) {\
  return (v1 > v2) ? v1 : v2;\
}
[/color]

[color=006080]//类似,c风格模版类stack可以写为:
[/color][color=006000]#define c_stack(type, len) \
typedef struct stack_##type {\
  type data[len];\
  int capacity;\
  int top;\
}stack_##type;\
void ini_stack_##type(stack_##type * t, int l) {\
  t->capacity = l;\
  t->top = 0;\
}\
void push_##type(stack_##type * t, type v) {\
  assert(t->top < t->capacity);\
  t->data[t->top++] = v;\
}\
type pop_##type(stack_##type * t) {\
  return t->data[--t->top];\
}
[/color]
[color=006000]#define get_stack(name, type, len) \
stack_##type name;\
ini_stack_##type(&name, len)
[/color]
[color=006080]//  函数“实例化”
[/color]print[color=a46434]([/color]string[color=a46434])[/color]
print[color=a46434]([/color][color=0000FF]int[/color][color=a46434])[/color]
max[color=a46434]([/color][color=0000FF]int[/color][color=a46434])[/color]

[color=006080]//  模版类“实例化”
[/color]c_stack[color=a46434]([/color][color=0000FF]int[/color][color=a46434],[/color] [color=800080]10[/color][color=a46434])[/color]

[color=0000FF]int[/color] main[color=a46434]()[/color] [color=a46434]{[/color]
  print_string[color=a46434]([/color]string[color=a46434]([/color][color=cc0000]"i work"[/color][color=a46434]));[/color]
  print_int[color=a46434]([/color][color=800080]3[/color][color=a46434]);[/color]
  cout [color=a46434]<<[/color] max_int[color=a46434]([/color][color=800080]3[/color][color=a46434],[/color] [color=800080]2[/color][color=a46434])[/color] [color=a46434]<<[/color] endl[color=a46434];[/color]

  get_stack[color=a46434]([/color]is[color=a46434],[/color] [color=0000FF]int[/color][color=a46434],[/color] [color=800080]10[/color][color=a46434]);[/color]
  [color=0000FF]for[/color] [color=a46434]([/color][color=0000FF]int[/color] i [color=a46434]=[/color] [color=800080]0[/color][color=a46434];[/color] i [color=a46434]<[/color] [color=800080]10[/color][color=a46434];[/color] i[color=a46434]++)[/color] [color=a46434]{[/color]
    push_int[color=a46434](&[/color]is[color=a46434],[/color] i[color=a46434]);[/color]
  [color=a46434]}[/color]
  [color=0000FF]for[/color] [color=a46434]([/color][color=0000FF]int[/color] i [color=a46434]=[/color] [color=800080]0[/color][color=a46434];[/color] i [color=a46434]<[/color] [color=800080]10[/color][color=a46434];[/color] i[color=a46434]++)[/color] [color=a46434]{[/color]
    cout [color=a46434]<<[/color] pop_int[color=a46434](&[/color]is[color=a46434])[/color] [color=a46434]<<[/color] endl[color=a46434];[/color]
  [color=a46434]}[/color]
[color=a46434]}[/color]

回复列表 (共9个回复)

沙发

对实际编程用处不大——上述内容纯属搞笑耳!

板凳

听说Linux Kernel里用C实现了模板List之类的。
但是似乎宏用得很多……

3 楼

very nice!

4 楼

多谢楼主了 呵呵今天看MSDN的时候忽然就有想法把数据结构C版课程里的内容写成通用型的 朦朦胧胧有种灵感似乎可以有更好点的形式 要是成功的话偶也贴过来 当是娱乐嘛^_^

5 楼

哈哈.路过

6 楼

好东西

7 楼

[quote]听说Linux Kernel里用C实现了模板List之类的。
但是似乎宏用得很多……[/quote]
不是真的

8 楼

9 楼

对于宏完全没有意见...

我来回复

您尚未登录,请登录后再回复。点此登录或注册