模板大小递归--构造函数多个重载



我正在做一个练习(不是家庭作业;它是自己分配的),需要一个模板化的类,该类用函数调用一半大的类。自然地,这意味着递归一直持续到某个基本情况(n==1)。我遇到的问题是,我还想写一个基于F的构造函数,当n=0时(使用复制构造函数,如0/2==0),这会导致"多个重载"。

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专门化任何一个构造函数都不起作用,因为我还剩下两个构造函数。

感谢

您可以通过添加未使用的参数来消除"递归构造函数"的歧义

Foo(const Foo<n / 2>& x, int) {};

通过这种方式,n=0,1的情况仍然与复制构造函数不同。

我发现的最好的解决方案是专门化整个结构/类

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;
};

相关内容

  • 没有找到相关文章

最新更新