您的位置:首页 > 编程语言 > C语言/C++

C++容易的泛型

2012-08-16 12:04 197 查看
比C++容易的泛型。

看看下面简单的例子:

Cpp代码


module testContainer;

import std.stdio;

import std.container;

void main(){

SList!int myList;

foreach(i;0..10){

myList.insert(i);

}

foreach(element;myList){

writeln(element);

}

}

现在来定义个User类,放入SList中:

Cpp代码


module freebird;

import std.string;

class User{

private:

string name;

public:

void setName(string argName){

name = argName;

}

string getName(){

return name;

}

}

main.d file:

module testContainer;

import std.stdio;

import std.container;

import std.format;

import freebird;

import std.conv;

void main(){

SList!User users;

foreach(i;0..10){

string part1 ="name";

string part2 = to!string(i);

string name = part1 ~ part2;

User user = new User();

user.setName(name);

users.insert(user);

}

foreach(curUser;users){

writeln(curUser.getName());

编写自己的模板,有一个Users类,内部管理了很多User对象。可以用在多线程和单线程环境下,因此接受一个模板策略类Lock。

main.d文件

Cpp代码


void main(){

alias UserTemplate!(MutexLock).Users UsersType;

UsersType users = new UsersType();

foreach(i;0..10){

string part1 ="name";

string part2 = to!string(i);

string name = part1 ~ part2;

User user = new User();

user.setName(name);

users.add(user);

}

foreach(curUser;users.getValues()){

writeln(curUser.getName());

}

}

users.d文件

Cpp代码


module freebird.users;

import std.container;

import freebird.user;

//Pass MutexLock if you are in multi-thread context

//Pass NoneLock if you are in single-thread context

template UserTemplate(Lock){

class Users{

private:

SList!User values;

Lock l;

public:

this(){

l = new Lock();

lock.d文件

Cpp代码


module freebird.lock;

import std.stdio;

class MutexLock{

public:

void lock(){

writeln("mutex lock");

}

void unlock(){

writeln("mutex unlock");

}

};

class NoneLock{

public:

void lock(){

writeln("nothing lock");

}

void unlock(){

writeln("nothing unlock");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: