2402C++,C++26包索引

原文

新的索引式访问方式

当前,要定义一个参数包变量,需要借助std::tuple;要索引式访问参数包元素,需要借助std::getstd::tuple_element;要解包,需要借助std::apply.
而借助这些新的特性,以后可直接写出此代码:

template <typename... Ts>
class Tuple {
   
public:
    constexpr Tuple(Ts&&... ts)
        : elems(std::forward<Ts>(ts))...
    {
    }
    template <size_t I>
    auto get() const&-> Ts...[I] const& {
   
        return elems...[I]; //包索引
    }
private:
    Ts... elems; //可变包
};
template <size_t I, typename... Ts>
struct std::tuple_element<I,Tuple<Ts...>>{
   
    using type = Ts...[I]; //包索引
};
int main() {
   
    Tuple<int, char> tup(1, 'c');
    return tup.get<0>();
}

该实现元组的方式借助了包索引变量包(尚未入标准),它比ReflectionforC++中介绍的反射方式还要直接了当,是最简洁的实现方式.

语法解析

深思熟虑过后,最终包索引的语法为:

包名 ... [常表达式]

这样可直接访问指定位置的参数包,示例:

template <typename... T>
constexpr auto first_plus_last(T... values) -> T...[0] {
   
    return T...[0](values...[0] + values...[sizeof...(values)-1]);
}
static_assert(first_plus_last(1,2,10) ==11 );

T...[N]针对的是类型,而values...[N]针对的是.参数包的首位元素末位元素,返回一个编译期常量值.

尚未完善
虽然包索引已进C++,但还未完善.更多见原文!

相关推荐

  1. 2402C++,C++26索引

    2024-02-21 05:06:08       37 阅读
  2. cf240-B-Mashmokh and ACM DP

    2024-02-21 05:06:08       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-21 05:06:08       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-21 05:06:08       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-21 05:06:08       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-21 05:06:08       18 阅读

热门阅读

  1. SpringBoot

    2024-02-21 05:06:08       25 阅读
  2. js遇到的问题 --持续更新

    2024-02-21 05:06:08       30 阅读
  3. rust gui fltk

    2024-02-21 05:06:08       29 阅读
  4. Rabbitmq的几种模式的总结

    2024-02-21 05:06:08       30 阅读
  5. 学习数据接构和算法的第11天

    2024-02-21 05:06:08       31 阅读
  6. 【Git】切换分支【2024年2月19日】

    2024-02-21 05:06:08       29 阅读
  7. Spring设计模式之工厂模式创建Bean对象

    2024-02-21 05:06:08       28 阅读
  8. eNSP学习——RSTP基础配置

    2024-02-21 05:06:08       30 阅读
  9. 如何使用阿里云OSS进行前端直传

    2024-02-21 05:06:08       27 阅读