我正在创建一个模板类D<N>
,它有一个返回不同类型的方法(在本例中为 operator()),具体取决于 N 的值。
我只能通过创建两个单独的类声明来完成这项工作,但这是以大量重复代码为代价的。我还尝试创建一个通用基类来将通用的东西放入其中,但我无法让构造函数正确继承,也不知道这会是多么地道......
#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;
}
如何让我的代码看起来更好看?