• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: 网络 收藏 邀请

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); }

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

template<typename _T>void debug(_T a, std::string b) { cout<<a<<b<<endl; }template<typename _T, typename _T1>void debug(_T a, _T1 b, std::string c) { cout<<a<<b<<c<<endl; }

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

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

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

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

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

Debug<void(int)> a;a.debug(3,"0");Debug<void(int,string)> b;b.debug(3, "4", "0");

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
下一篇:
jshint-gralde: jshint的gradle插件发布时间:2022-02-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap