C 模板元程式設計 1 基本資料型別和運算

2022-07-27 01:21:16 字數 3974 閱讀 8708

這是部落格開通前幾天做的,c++的模板沒辦法存方便的浮點數,算了。

基本型別的設計參考了vczh輪子叔模仿boost的mpl的設計。

話說template和typename寫多了真是無限煩人啊,不得已定義了幾個巨集,然後運算的定義也是用巨集批量生成的。

1 template2

struct

podtype3;

89 template

10using int = podtype;

1112 template

13using bool = podtype;

1415 template

16using char = podtype;

1718

#define tn typename

19#define tt template

20#define ss struct

2122

#define define_bin_meta_operation_head(name) \

23 tt\

24ss name

2526

#define define_bin_meta_operation_body(name, ttype, vtype, rtype, op) \

27 tt\

28 ss name, ttype>\

2932

33#define define_una_meta_operation_head(name) \

34 tt\

35ss name

3637

#define define_una_meta_operation_body(name, ttype, vtype, rtype, op) \

38 tt\

39 ss name>\

4043

44define_bin_meta_operation_head(add);

45 define_bin_meta_operation_body(add, int, int, int, +);

46 define_bin_meta_operation_body(add, char, char, char, +);

47define_bin_meta_operation_head(sub);

48 define_bin_meta_operation_body(sub, int, int, int, -);

49 define_bin_meta_operation_body(sub, char, char, char, -);

50define_bin_meta_operation_head(mul);

51 define_bin_meta_operation_body(mul, int, int, int, *);

52 define_bin_meta_operation_body(mul, char, char, char, *);

53define_bin_meta_operation_head(div);

54 define_bin_meta_operation_body(div, int, int, int, /);

55 define_bin_meta_operation_body(div, char, char, char, /);

56define_bin_meta_operation_head(mod);

57 define_bin_meta_operation_body(mod, int, int, int, %);

58 define_bin_meta_operation_body(mod, char, char, char, %);

59define_bin_meta_operation_head(and);

60 define_bin_meta_operation_body(and, bool, bool, bool, &&);

61define_bin_meta_operation_head(or);

62 define_bin_meta_operation_body(or, bool, bool, bool, ||);

63define_bin_meta_operation_head(xor);

64 define_bin_meta_operation_body(xor, bool, bool, bool, ^);

65define_bin_meta_operation_head(eq);

66 define_bin_meta_operation_body(eq, bool, bool, bool, ==);

67 define_bin_meta_operation_body(eq, int, int, bool, ==);

68 define_bin_meta_operation_body(eq, char, char, bool, ==);

69define_bin_meta_operation_head(neq);

70 define_bin_meta_operation_body(neq, bool, bool, bool, !=);

71 define_bin_meta_operation_body(neq, int, int, bool, !=);

72 define_bin_meta_operation_body(neq, char, char, bool, !=);

73define_bin_meta_operation_head(gt);

74 define_bin_meta_operation_body(gt, int, int, bool, >);

75 define_bin_meta_operation_body(gt, char, char, bool, >);

76define_bin_meta_operation_head(lt);

77 define_bin_meta_operation_body(lt, int, int, bool,

78 define_bin_meta_operation_body(lt, char, char, bool,

79define_bin_meta_operation_head(ge);

80 define_bin_meta_operation_body(ge, int, int, bool, >=);

81 define_bin_meta_operation_body(ge, char, char, bool, >=);

82define_bin_meta_operation_head(le);

83 define_bin_meta_operation_body(le, int, int, bool, <=);

84 define_bin_meta_operation_body(le, char, char, bool, <=);

85define_una_meta_operation_head(neg);

86 define_una_meta_operation_body(neg, int, int, int, -);

87 define_una_meta_operation_body(neg, char, char, char, -);

88define_una_meta_operation_head(not);

89 define_una_meta_operation_body(not, bool, bool, bool, !);

使用起來是這樣的

1 int<1>a;

2 int<2>b;

3 add::result aplusb;

4 sub::result aminusb;

56 boolb1;

7 boolb2;

8 and::result b1andb2;

可以從vs2015的intellisense很清楚得看到運算結果

就這樣

1 基本資料型別

python 3支援int float bool complex 複數 a,b,c,d 20,5.5,true,3 4jprint type a type b type c type d class int class float class bool class complex a 4 5 加法 ...

C語言基本資料型別 1

通過前面的舉例分析,我們知道房子的型別,決定了房子的屬性。例如,一房一廳的房子,有乙個房間的空間 兩房一廳的房子,有兩個房間的空間。同理,在c語言中,提供了 資料型別 它可以定義變數。不同資料型別定義的變數,有不同的儲存空間和使用方式。c語言支援的基本資料型別有 1 char型別,char型別稱為 ...

Python 程式設計入門(1) 基本資料型別

以下所有例子都基於最新版本的 python,為了便於消化,每一篇都盡量短小精悍,希望你能盡力去掌握 python 程式設計的 概念 可以的話去動手試一下這些例子 就算目前還沒完全搞懂 加深理解。程式 資料結構 演算法。資料結構就是儲存資訊的方法 計算什麼 演算法就是解決問題的方法 怎麼計算 先講資料...