我正在编写一个轻量级的解析器组合库(类似于 Boost::Spirit)作为个人项目。
其中一个想做的事情是,能够自动地将 Result<std::tuple<char>>
、Result<std::tuple<char, char>>
等转换为 std::string
。
同样地,如果有一个例如 Result<std::tuple<int, int>>
的结果,我希望能够将其自动转换为 Result<std::vector<int>>
,或者更普遍地,对于任何包含零个或多个相同类型的元素 T
的元组,我希望能够自动将其转换为 Result<Container<T>>
。
如何处理这样的问题?例如我尝试了:
template<typename Container>
Result<decltype(std::make_from_tuple<Container>(std::declval<T>()))> () const {
Result{Container{std::make_from_tuple<std::initializer_list<typename std::tuple_element<0, T>::type>> (std::get<T>(*this))}};
}
但是这并不起作用,因为事实证明无法像这样通过编程方式创建初始化列表。