一些D模板问题

GKe*_*lly 6 templates d

我最近一直在玩D语言,我有一个关于模板的快速问题.

我将字符和字符串插入到代码中的现有字符串中,并提出了以下函数:

string insert(T)(string s1, T s2, uint position) {
    return s1[0 .. position] ~ s2 ~ s1[position .. $];
}
Run Code Online (Sandbox Code Playgroud)

现在,我有几个问题.

  1. 我可以限制s2参数允许的类型(我只想要char,wchar,dchar等以及它们各自的数组值)吗?

  2. 是否有某种方法可以定义模板以自动知道如果位置arg为0则预先添加?像这样的东西(不编译,但给出一般的想法):

    string insert(T)(string s1, T s2, uint position) {
      static if (position == 0)
        return "" ~ s2 ~ s1;
      else
        return s1[0 .. position] ~ s2 ~ s1[position .. $];
    }
    
    Run Code Online (Sandbox Code Playgroud)

谢谢

Vla*_*eev 4

  1. 是 - 使用模板参数专门化模板约束(相当于 C++1x 概念)。
  2. static if意味着可以在编译时计算条件。函数参数不能,因此要么使用常规参数if,要么创建position模板参数。