gpt4 book ai didi

c++ - 如何检查 T 是否为聚合类型?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:09 25 4
gpt4 key购买 nike

我知道 std::is_pod。但它检查的不仅仅是聚合类型。或者,std::is_pod 是我们能做的最好的吗?

基本上,我想为this写一个函数模板:

template <typename T>
aggregate_wrapper<T> wrap(T&& x);

仅当 T 是聚合类型时才启用。

最佳答案

无法合成 is_aggregate 模板。 C++14 元编程技术无法检测某些事物是否参与聚合初始化的规则(它们需要反射支持)。

没有这个的一般原因是缺乏明确的需求。即使在 your wrapper 的情况下,将其应用于非聚合类型几乎没有什么危害,因为统一的初始化语法可以应用于非聚合。您将使所有转换成为非显式,但这可以通过巧妙的元编程/enable_if 技巧来解决。

这种东西最有用的地方是 allocator::construct,如果 T 是一个聚合,它允许您使用聚合初始化来构造对象,同时使用直接构造函数调用(以避开统一初始化的“不统一”部分)。

关于c++ - 如何检查 T 是否为聚合类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34994364/

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