D<N>
N の値に応じて異なる型を返すメソッド (この場合は operator()) を使用して、テンプレート化されたクラスを作成しています。
2 つの別個のクラス宣言を作成することによってのみ、これを機能させることができましたが、これには多くのコードの重複という代償が伴いました。また、共通のものをスローする共通の基本クラスを作成しようとしましたが、コンストラクターを正しく継承させることができず、それがどれほど慣用的であるかもわかりません...
#include <cstdio>
template <int N>
struct D{
int s;
D(int x):s(x){}
int yell(int x){
printf("N=%d, %d\n", N, s+x);
return s+x;
}
D<N-1> operator()(int x){
D<N-1> d(yell(x));
return d;
}
};
template <>
struct D<1>{
int s;
D(int x): s(x){}
int yell(int x){
printf("N=%d, %d\n", 1, s+x);
return s+x;
}
int operator()(int x){
return yell(x);
}
};
int main()
{
D<2> f(42);
printf("%d\n", f(1)(2));
return 0;
}
コードの見栄えを良くするにはどうすればよいですか?