gpt4 book ai didi

c++ - 结构如何继承自身?

转载 作者:太空狗 更新时间:2023-10-29 20:53:19 27 4
gpt4 key购买 nike

template <bool condition>
struct when;

template <typename It, typename = void>
struct at_impl : at_impl<It, when<true>> { };

struct at_t {
template <typename Xs, typename N>
constexpr decltype(auto) operator()(Xs&& xs, N const& n) const;
};

constexpr at_t at{};

int main()
{
}

这个程序是如何编译的?结构如何继承自身?!我不知道这里发生了什么。这是 c++ 中的新功能吗?

最佳答案

How can a struct inherits itself?

没有。结构不能继承自身。

作为结构模板实例的结构可以继承同一模板的另一个实例,只要使用不同的模板参数对父实例进行实例化†。

at_impl不是结构;它是一个模板。 at_impl<It, when<true>>是模板的一个实例,它是一个结构体。

请注意,在实例化派生结构时,父结构必须是完整的。如果 parent 是特化,这是可能的。您的示例未显示 at_impl<It, when<true>> 的定义特化,也不是 at_impl 的任何实例化.


这类似于函数。函数可以递归调用自身,但函数参数必须改变。如果一个函数用相同的参数调用自身,那么递归永远不会终止。没有参数的函数不能递归 ††。

现在,模板具有参数,类似于具有参数的函数。类型没有模板参数,类似于没有参数的函数。实例化模板会产生一个类型,类似于函数调用。


† 这是递归终止的必要条件,但不是充分条件。

†† 除非函数依赖于全局状态,但从抽象的角度来看,我们必须将全局状态视为此上下文中的隐式参数。

关于c++ - 结构如何继承自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43115357/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com