情報
テンプレート エイリアスを使用して、コードの読みやすさを改善しようとしています。理想的には、テンプレートを省略した場合にデフォルトを使用するように、エイリアスにデフォルトの引数を持たせたいと思います(正確にはテンプレート関数とテンプレートクラスで)。
コードは次のようになります
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
ますが、これを無視しているようです。
エイリアスを「特殊化」するようなことも試しましたが、コンパイラーが失敗しました。
質問
デフォルトの使用が許可されていないのに、コンパイラが定義でデフォルトを受け入れるのはなぜですか? 第二に、これを達成する方法はありますか?
動機
この例は非常に単純ですが、私の実際のコードでは、エイリアスにより多くの入力が節約されます (複数のテンプレート パラメーターがあります)。