gpt4 book ai didi

c++ - 可变参数聚合作为核心语言功能

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

std::tuple 是高度模板加载的野兽。要访问第 n 个成员,编译器必须执行大量模板实例化,尽管它的性质很简单:访问相应虚构结构的第 n 个数据成员。看起来 std::tuple 应该是一个核心语言特性,像这样(伪代码):

template< typename ...types >
struct/* or class, or even union */ V
{
types... V; // defines implicitly `operator [/*constant expression*/]` to access by index
// if more than one variadic parameter pack provided
// (during expanding of parameter pack of template
// parameters in specializations) then instead of
// `V` there can be specific data-member name (say, `x`),
// but still with `x.operator []` implicitly defined

// member functions and data members allowed
};

template< typename ...types >
V< std::decay_t< types >... > make_tuple(types &&... args)
{ return {std::forward< types >(args)...}; }
template< typename ...types >
V< types &&... > forward_as_tuple(types &&... args)
{ return {std::forward< types >(args)...}; }
template< typename ...types >
V< types &... > tie(types &... args)
{ return {args...}; }

是否有类似语言支持类的可变参数数据成员定义语法的建议?

最佳答案

参见 N4235 Selecting from Parameter Packs一个相关的想法。

这可能对 std::tuple 有用,但我更感兴趣的是简化其构造的功能,而不是成员选择(相对简单)。

std::tuple 的定义异常复杂,为了使所有构造函数正确模拟所有成员的属性(参见 N4064 了解该领域的最新变化) .

当您使用聚合初始化时,编译器会自动检查聚合的每个成员是否可以从相应的初始化器构造。它检查合适的构造函数,它们是否是显式,是否接受相关的左值/右值类别等。

当您为 std::tuple 定义构造函数时,必须非常复杂以确保只发生有效的转换,explicit 构造函数不会在它们应该使用的时候使用等

我想要一个功能,它可以更轻松地自动生成合适的构造函数来建模与从聚合初始化中免费获得的语义相同的语义。

关于c++ - 可变参数聚合作为核心语言功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32906650/

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