定义trais类

 1 // 先定义两种类型
 2 struct A{};
 3 struct B{};
 4
 5 class Foo
 6 {
 7 public:
 8     // 将类型A绑定到Foo
 9     typedef A classtype;
10
11     void foo()
12     {
13         std::cout << __FUNCTION__ << std::endl;
14     }
15 };
16
17 class Bar
18 {
19 public:
20     // 将类型B绑定到Bar
21     typedef B classtype;
22
23     void bar()
24     {
25         std::cout << __FUNCTION__ << std::endl;
26     }
27 };
28
29 // 可选,为Foo Bar定义一个traits类
30 template<typename T>
31 class test_traits
32 {
33 public:
34     typedef typename T::classtype classtype;
35 };
36
37 // 定义一个以Foo Bar为参数的模板函数
38 template<typename T>
39 void func()
40 {
41     // 如果不定义traits类,这里可以直接使用T::classtype
42     do_func(T(), test_traits<T>::classtype());
43 }
44
45 // func函数真的A类型class的实现
46 template<typename T>
47 void do_func(T &ins, A a)
48 {
49     ins.foo();
50 }
51
52 // func函数真的B类型class的实现
53 template<typename T>
54 void do_func(T &ins, B a)
55 {
56     ins.bar();
57 }
58
59 int main(void)
60 {
61     func<Foo>();
62     func<Bar>();
63 }
时间: 2024-08-03 21:26:51

定义trais类的相关文章

ArcGIS 利用定义标注类

ArcGIS 利用定义标注类 ArcGIS定义标注类

c++类定义和类实现

预备知识: c++中我们cpp文件和.h文件的区别是,cpp文件是需要编译的文件,成为一个独立的编译单元,而h文件从来是不需要编译,只是用于预处理. 通常我们在cpp文件中,完成函数的实现,然后在h中则是对于函数的声明,由于默认情况下,全局变量和全局函数存储类型都是extern类型的,所以我们不需要显示的使用extern 这样,我们其他的cpp文件,只要#include .h文件,则在cpp中实现的函数,就能在其他cpp中使用,因为我们已经用.h文件,完成了extern函数声明的操作. c++类

ExtJs--07--Ext.define定义一个类的过程

Ext.onReady(function(){ //Ext定义一个类 Ext.define( "Person", { config:{ name:"jack", age:22 }, fangfa:function(){ Ext.Msg.alert("标题信息","提示内容信息") } , constructor:function(config){ //测试构造器调用没有及参数传递进来没有 // for(var attr in

JAVA中的单例模式(采用单例模式定义的类)(转)

1     单例(Singleton)模式:单例模式确保某一个类只有一个 实例,而且该类只能是自己 实例化自己并向其他类公开 这个实例的对象创建 模式 采用单例模式的类:根据单例模式知道其要满足以下三点 1. 确保某一个类只有一个实例 2. 而且自己实例化 3. 并向其他类提供这个实例类 . 2    确保以上三点的所采用的编程策略     * 把构造方法声明为Private.确保只能由自己创建,避免外部创建实例或者被子类继承从而创造额外实例:    * 定义一个私有静态的该类的实例作为该类的数

C++ Primer 学习笔记_66_面向对象编程 --定义基类和派生类[续]

算法旨在用尽可能简单的思路解决问题,理解算法也应该是一个越看越简单的过程,当你看到算法里的一串概念,或者一大坨代码,第一感觉是复杂,此时不妨从例子入手,通过一个简单的例子,并编程实现,这个过程其实就可以理解清楚算法里的最重要的思想,之后扩展,对算法的引理或者更复杂的情况,对算法进行改进.最后,再考虑时间和空间复杂度的问题. 了解这个算法是源于在Network Alignment问题中,图论算法用得比较多,而对于alignment,特别是pairwise alignment, 又经常遇到maxim

C#1(.net和C#的关系、VS与.net的对应关系、VS2012常用的几种应用程序、C#定义一个类的方法、类页面内容的解释、定义Person的类、调用Person类的方法、命名规范、数值类型)

1..net和C#的关系 .net是一个开发平台,C#是应用在.net平台上的一种语言.   2.VS与.net的对应关系  3.VS2012常用的几种应用程序 第一种是Windows窗体应用程序,也即是我们常用的C/S端的应用软件: 第二种是控制台应用程序,主要是用来学习调试C#代码的(老师上课应用的模式): 第三种是空Web应用程序,建立空的网页模式,B/S模式: 第四种是Web 窗体应用程序,建立后会生成一些常用的网页组件和功能,例如JS.image等,也是B/S模式. 4.C#定义一个类

定义事件类,该事件类必须继承

创建自定义事件的步骤:定义事件类,该事件类必须继承自wx.PyCommandEvent,并定义get和set方法来获取和设置事件参数.创建一个事件类型和一个绑定器对象去绑定该事件到特定的对象.创建自定义事件对象,设置事件参数,并且使用ProcessEvent()方法将这个实例引入事件处理系统.绑定自定义事件的event handler.在event handler中响应事件.代码: #!/usr/bin/env python#coding=utf-8import wx class MyTestE

ExtJS学习笔记:定义extjs类

定义类 Ext.define('Cookbook.Vehicle', { Manufacturer: 'Aston Martin', Model: 'Vanquish', getDetails: function(){ alert('I am an ' + this.Manufacturer + ' ' + this.Model); } }, function(){ Console.log('Cookbook.Vehicle class defined!'); }); 第一个参数是类名,第二个参

在C++中定义接口类,在C#中实现

网上大部分都是C#调用C++的接口,很少有C++调用C#的,更少有在C++中定义接口类,在C#中实现. 千辛万苦,终于找到一个网址:http://www.tuicool.com/articles/AFjY7j 简单翻译一下, class __declspec(dllexport) CSimpleClass { public: int value; CSimpleClass(int value) : value(value) { } ~CSimpleClass() { printf("~CSimp