6

情報

テンプレート エイリアスを使用して、コードの読みやすさを改善しようとしています。理想的には、テンプレートを省略した場合にデフォルトを使用するように、エイリアスにデフォルトの引数を持たせたいと思います(正確にはテンプレート関数とテンプレートクラスで)。

コードは次のようになります

template<typename T = double>
struct mystruct {};

template<typename T = double> using myalias = mystruct<T>;

int main(void) {

    myalias MyStructWithDouble; // causes compilation error
    myalias<int> MyStructWithInt;

    return 0;
}

コンパイラ (この場合は g++ 4.7) は、エイリアス定義に を含めることに非常に満足してい= doubleますが、これを無視しているようです。

エイリアスを「特殊化」するようなことも試しましたが、コンパイラーが失敗しました。

質問

デフォルトの使用が許可されていないのに、コンパイラが定義でデフォルトを受け入れるのはなぜですか? 第二に、これを達成する方法はありますか?

動機

この例は非常に単純ですが、私の実際のコードでは、エイリアスにより多くの入力が節約されます (複数のテンプレート パラメーターがあります)。

4

1 に答える 1

12

クラス テンプレートと同様に、空のテンプレート引数リストを指定する必要があります。

myalias<> MyStructWithDouble; // compiles
于 2013-07-02T10:22:37.900 に答える