5

なんらかの方法で対処する必要があるushortとしましょう。したがって、との両方に1つの専用テンプレートが必要だと思います。それは...ですか?uintstringstringushortuint


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

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

コードはコンパイルできませんが、それがアイデアです。それは有効ですか、それとも非常に悪いですか?

4

3 に答える 3

7

これを試して:

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

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

1つの関数でそれを行うこともできます:

void func(T)(T var)
{
    static if ( is(T : uint) || is(T : ushort) )
    {
        ...
    }
    else if ( is(T : string) )
    {
        ...
    }
    else
    {
        // handle anything else
    }
}
于 2010-10-07T06:12:34.347 に答える
6

特定のタイプのみが必要な場合は、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 {
        //...
    }
}
于 2010-10-07T08:04:30.777 に答える
0

あなたは彼の意味を正確に理解していませんミックスマルチテンプレートパラメータはこのようにすべきです

void func(T...)(T args)
{
    static if(T.length==2&&is(T[0]:int)&&is(T[1]:short))
    {
       //do some thing func(int,short)
    }else static if(T.length==1&&is(isSomeString!T[0])
    {
    }otherwise
    {
       static assert("unsupport function");
    }

}
于 2010-10-17T05:16:19.717 に答える