几个要点,一点要看!
一、本次开放时间为北京时间(时间结束才拉人):
2023.11.04 上午10点 ~ 2023.11.05 晚上8点。
二、入口获取方式:按要求在公众号后台回复下面问题答案,即可得到。
问题:
Modern C++ 存在一些异构类型,而它们又可以分为静态异构类型和动态异构类型。
静态异构类型,例如 std::pair 和 std::tuple,它们能够指定不同的数据类型,但是无法动态地装入数据。
动态异构类型不仅能够指定不同的数据类型,还可以支持动态装入数据,从而可以和 std::vector 组合起来构成异构容器使用。下面是一个小例子助于理解:
1void print(auto tuple_like_value) {
2 std::apply([](const auto&... args) {
3 (fmt::print("{} ", args), ...);
4 }, tuple_like_value);
5
6 fmt::print("\n");
7}
8
9int main() {
10
11 // std::pair 的例子
12 {
13 using heterogenous_t = std::pair<int, double>;
14 heterogenous_t container { 1, 0.8 };
15 print(container);
16 }
17
18 // std::tuple 的例子
19 {
20 using heterogenous_t = std::tuple<int, double, bool>;
21 heterogenous_t container { 1, 0.42, true };
22 print(container);
23 }
24
25 // 问题
26 {
27 using value_type = ???;
28 using heterogenous_t = std::vector<value_type>;
29 heterogenous_t container;
30 container.push_back(5);
31 container.push_back(0.42);
32 container.push_back("hello");
33 }
34
35}
动态异构类型(27 行 value_type)与 std::vector 构成的异构容器(28 行),能够保存不同类型的值。
C++17 新增了两个这样的类型,请像 std::pair 和 std::tuple 这样,带命名空间,不带模板参数名称,写出它们的名称。
回复格式为:ns::type1 ns::type2。(使用微信自带的完整匹配关键词回复,回复格式不对或答案错误都无法立即收到回复,请注意多余的空格或错打中文符号问题)
注意,是在以下地方回答,不是留言区。
三、加上请耐心等待,时间一到不会遗漏一人,不要老是来问这里已经写过的注意力。