templates - 一个专用 D 模板中的多种类型

标签 templates d specialization

说我必须处理ushortuint某种方式,但是 string不同。所以我想我需要一个专门用于 string 的模板和其他两者 ushortuint .是吗?


// for most
void func(T)(T var) { ... }

// for uint and ushort
void func(T: uint, ushort)(T var) { ... }


这就是想法,尽管代码无法编译。它是有效的还是非常糟糕的?

最佳答案

尝试这个:

void func(T)(T var) if ( is(T : uint) || is(T : ushort) )
{
   ...
}

void func(T : string)(T var)
{
   ...
}

您也可以在一个函数中执行此操作:
void func(T)(T var)
{
    static if ( is(T : uint) || is(T : ushort) )
    {
        ...
    }
    else if ( is(T : string) )
    {
        ...
    }
    else
    {
        // handle anything else
    }
}

关于templates - 一个专用 D 模板中的多种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3878836/

相关文章:

c++ - 元编程,试图避免许多特化

c++ - 库使用的模板实例化

html - 不同的页面模板在 WordPress 中不显示内容

c++ - 迭代基本类型时使用 const 引用有什么缺点吗?

D: 如何从main 退出?

io - 二进制文件I/O

c++ - 为模板类专门化模板函数

design-patterns - 静态工厂模式

c++ - 为什么这不是函数模板的部分特化?

c++ - 专门化可变参数模板的返回类型