最初の質問は、クラス テンプレートにそれだけの数のパラメーターが本当に必要かということです。もしそうなら、それらは何らかの方法で詰めることができますか?
第 2 に、すべての関数をインラインで定義するボイラープレートが実際のコードを圧倒している場合、クラス定義でそれらをインラインで定義してみませんか? はい、一般的に悪いスタイルだと考える人もいますが、それはトレードオフです。そのガイドラインの目標は、コードを読みやすくすることであり、逆の効果がある場合は無視してください。
より良いコード編成のため.ipp
にファイルの最後に含まれる別のファイルに実装を保持したい場合でも、それを途中に含めるように変更できます。.hpp
.ipp
foo.hpp:
template <class a, class b ... class x>
class foo {
#include "foo_impl.ipp"
};
foo_impl.ipp:
void function1() {}
void function2() {}
これらのアイデアのどちらにも魅力を感じない場合、typedef またはテンプレート エイリアスが役立つ方法はありません。これは、テンプレートの特殊化に名前を付けるためのものだからです。あなたが何をしても、まだ自由であるテンプレートパラメータはリストされていなければならず、そうでなければコンパイラはあなたが何について話しているのか分かりません。
ただし、いつでもプリプロセッサを使用できます。
#define FOOMETHOD(rettype) template<class a, class b ... class x> \
rettype foo<a, b, ..., x>
FOOMETHOD(void)::function1() { }
FOOMETHOD(void)::function2() { }
これを変更する方法はたくさんあります — をマクロに入れたり、::
2 つのマクロに分割して rettype を渡す必要がないようにしたり、タイプごとに異なるマクロを定義したりします。場合は、そうしてください。