我正在做一个练习(不是家庭作业;它是自我分配的),需要一个模板化的类,它通过函数调用一半大的类。当然,这意味着递归持续到一些基本情况(n == 1)。我遇到的问题是我还想编写一个基于F的构造函数,当n == 0时会导致“Multiple Overloads”(使用copy-constructor,为0/2 == 0)。 / p>
template<size_t n>
struct Foo {
Foo() {};
Foo(const Foo<n / 2>& x) {};
Foo<n / 2> bar() {
Foo<n / 2> rtn;
if(n > 1) {
rtn.bar();
}
rtn.bar();
return rtn;
}
}
int main(int, char const**) {
Foo<4> a;
Foo<2> b = a.bar();
}
这周围有吗?专门用于n == 0的构造函数不起作用,因为我还剩下两个构造函数。
由于
答案 0 :(得分:1)
您可以消除“重复构造函数”的歧义。通过添加未使用的参数
Foo(const Foo<n / 2>& x, int) {};
通过这种方式,n = 0,1的情况仍然与复制构造函数不同。
答案 1 :(得分:0)
我发现最好的解决方法是专门化整个结构/类
template<size_t n>
struct Foo {
Foo() {};
Foo(const Foo& x) {};
Foo(const Foo<n / 2>& x) {}
Foo<n / 2> bar() const {
Foo<n / 2> rtn;
if(n > 1) {
rtn.bar();
}
return rtn;
};
double data[n];
};
template <>
struct Foo<0> {
Foo() {};
Foo(const Foo& x) {};
Foo bar() const {
Foo rtn;
return rtn;
};
double* data;
};