Ped*_*rda 5 templates d specialization
说我要处理ushort
和uint
一些方法,但string
不同的.所以我猜我需要一个专门的模板string
和其他两个ushort
和uint
.是吗?
// for most
void func(T)(T var) { ... }
// for uint and ushort
void func(T: uint, ushort)(T var) { ... }
Run Code Online (Sandbox Code Playgroud)
这是想法,虽然代码无法编译.它有效还是非常糟糕?
试试这个:
void func(T)(T var) if ( is(T : uint) || is(T : ushort) )
{
...
}
void func(T : string)(T var)
{
...
}
Run Code Online (Sandbox Code Playgroud)
您也可以在一个函数中执行此操作:
void func(T)(T var)
{
static if ( is(T : uint) || is(T : ushort) )
{
...
}
else if ( is(T : string) )
{
...
}
else
{
// handle anything else
}
}
Run Code Online (Sandbox Code Playgroud)
如果您只需要特定类型,请按照Peter的回答.
如果您想要覆盖所有整数/数字数据和所有字符串(包括wstring和dstring)数据类型,那么您可以使用std.traits
模块中的帮助程序:
import std.traits;
void func(T)(T var)
{
static if (isNumeric!T) { // or isIntegral!T
//...
} else if (isSomeString!T) {
//...
}
else {
//...
}
}
Run Code Online (Sandbox Code Playgroud)