比C++容易的泛型。
看看下面簡單的例子:
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中:
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檔案
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檔案
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 contexttemplate UserTemplate(Lock){class Users{private:SList!User values;Lock l;public:this(){l = new Lock();
lock.d檔案
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");}}