【发布时间】:2020-05-08 13:38:59
【问题描述】:
我有以下代码
#include <string_view>
#include <utility>
namespace std
{
template <typename T1, typename T2>
pair(T1 t1, T2 t2) -> pair<T1, T2>;
}
template<typename ... T>
struct node {};
template<typename head_t, typename ... tail_t>
struct node<head_t, tail_t ...>
{
node(const head_t& head, const tail_t& ... tail)
: head(head)
, tail(tail...)
{}
head_t head;
node<tail_t ... > tail;
};
template <typename... T>
node(T... t) -> node<T...>;
int main()
{
node n{
std::pair{std::string_view{"a"}, int{4}},
std::pair{std::string_view{"b"}, int{5}},
std::pair{std::string_view{"dqwd"}, node{
std::pair{std::string_view{"asdas"}, float{3.4}}
}
};
return 0;
}
我用来编译的
g++ -Wall -Wextra -Wpedantic -std=gnu++17 -Wl,--wrap=malloc
我的数据结构是std::pair 的递归列表,第一个元素类型为std::string_view。
现在我想在初始化中去掉std::pair和std::string_view,因为它们总是相同的类型,我该如何实现呢?例如:
node n{
{"a", int{4}},
{"b", int{5}},
{"dqwd", node{
{"asdas", float{3.4}}
}
};
【问题讨论】:
-
等一下,将用户定义的推导指南放入
std命名空间是否合法? -
在这种情况下,无论如何都不需要pair的扣除指南。
标签: c++ c++17 template-meta-programming recursive-datastructures