TmplArgs- 函数参数分析程序

网友投稿 564 2022-10-17 13:07:00

TmplArgs- 函数参数分析程序

TmplArgs,使用模板技术分析函数参数,从而在编译期得到更多信息和条件。

我们可以通过函数重载为同名函数实现不同参数个数的版本,如:

int max(int a, int b) { return a>b?a:b; }int max(int a, int b, int c){ return max(a,b)>max(b,c)?max(a,b):max(b,c); }

我们还可以通过使用函数模板来扩展函数对参数类型的定制,如:

templatevoid debug(_T a, std::string b) { cout<void debug(_T a, _T1 b, std::string c) { cout<

然而这种规则对于类模板却并不是(至少现在不是)奏效的。如:

template struct Debug {    _T _a;    Debug(_T a) : _a(a) {}    void debug(std::string s) { cout<<_a< struct Debug {    _T _a;    _T1 _b;    Debug(_T a, _T1 b) : _a(a), _b(b) {}    void debug(std::string s) { cout<<_a<<_b<

上面的代码是不符合编译器(VS2010)规则的。也就是说我们没有办法为同名的类模板实现不同参数的版本。 那么我们有没有办法突破这个限制呢?是的,通过TmplArgs 库,我们便获得了这种能力。

虽然 TmplArgs 的使用难度已经降到了最低,但是它仍然不完美:首先,我们需要实现类模板的宏定义式,如 DebugBase.h。然后,我们需要实现类模板的通用形式,如 Debug.h。最后,我们还需要将参数规则写成函数指针的形式。

下面这段代码就是使用 TmplArgs 后对上面的 Debug 模板的改写:

Debug a;a.debug(3,"0");Debug b;b.debug(3, "4", "0");

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Redis如何解决频繁的命令往返造成的性能瓶颈!
下一篇:一个提高效率的工具,正则表达式,值得学习一下!
相关文章