C语言_宏重载及函数参数统计

通过宏重载和函数参数统计实现C语言的重载(静态多态)

#include <iostream>
using namespace std;

#define OVERLOADED_MACRO(M, ...)                _OVR(M, _COUNT_ARGS(__VA_ARGS__)) (__VA_ARGS__)
#define _OVR(macroName, number_of_args)         _OVR_EXPAND(macroName, number_of_args)
#define _OVR_EXPAND(macroName, number_of_args)  macroName##number_of_arg
#define _COUNT_ARGS(...)                        _ARG_PATTERN_MATCH(__VA_ARGS__, 9,8,7,6,5,4,3,2,1)
#define _ARG_PATTERN_MATCH(_1,_2,_3,_4,_5,_6,_7,_8,_9, N, ...)   N

//Example:
#define ff(...)                                 OVERLOADED_MACRO(ff, __VA_ARGS__)
#define ii(...)                                 OVERLOADED_MACRO(ii, __VA_ARGS__)
#define ff3(c, a, b)                            for (int c = int(a); c < int(b); ++c)
#define ff2(c, b)                               ff3(c, 0, b)
                    
#define ii2(a, b)                               ff3(i, a, b)
#define ii1(n)                                  ii2(0, n)


int main() {
    ff (counter, 3, 5)
        cout << "counter = " << counter << endl;
    ff (abc, 4)
        cout << "abc = " << abc << endl;
    ii (3)
        cout << "i = " << i << endl;
    ii (100, 103)
        cout << "i = " << i << endl;
    return 0;
}

输出结果:

counter = 3
counter = 4
abc = 0
abc = 1
abc = 2
abc = 3
i = 0
i = 1
i = 2
i = 100
i = 101
i = 102



.

作者:EnzoSun
微信关注:勿忘初兴
本文出处:http://sunduoze.github.io/post/C%E8%AF%AD%E8%A8%80_%E5%AE%8F%E9%87%8D%E8%BD%BD%E5%8F%8A%E5%87%BD%E6%95%B0%E5%8F%82%E6%95%B0%E7%BB%9F%E8%AE%A1/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。