【发布时间】:2020-08-10 21:33:43
【问题描述】:
我正在通过Boost.Hana's User Manual 了解更多关于 C++ 模板元编程和函数式编程的信息。
关于Real world example,我还是漏掉了一些,都集中在下面函数的定义中:
template<typename Any, typename Default, typename Case, typename ...Rest>
auto process(Any a, std::type_index const& t, Default default_, Case& case_, Rest ...rest) {
using T = typename decltype(+hana::first(case_))::type;
return typeid(T) == t ? hana::second(case_)(*boost::unsafe_any_cast<T>(&a))
: process(a, t, default_, rest...);
};
以下是我的疑惑和问题:
-
关于
using指令,我知道T是存储在case_的first条目中的类型,这是用hana::make_pair获得的一对,但为什么是这么复杂?我对所有::type、decltype、typename和hana::type_c感到有些困惑。它们如何相互交互(在这种情况下,如果问题似乎很笼统)?- 嗯,需要的
+也让我很困惑。它有什么用?
- 嗯,需要的
-
一旦我理所当然地认为
T是我需要的那种类型,我为什么要拿typeid(T) == t来比较它?- 从
std::type_index我读到type_index类是std::type_info对象的包装类, - 来自
std::type_info我读到type_info类包含有关类型的特定于实现的信息,包括类型的名称和意味着比较两种类型是否相等 或整理订购, - 从
typeid我读到(参考使用typeid(type))指的是一个std::type_info对象,表示类型类型,
这一切似乎都是相关的,但我不知道
typeid(T)(属于std::type_info)与std::type_index(来自调用a上的type成员函数)相比如何,我不知道它来自哪里。我希望有人能帮助我理解这一点。 - 从
-
在
typeid(T) == t为真时的返回语句中,为什么需要hana::second(case_)(*boost::unsafe_any_cast<T>(&a))而hana::second(case_)(a)不起作用?
【问题讨论】:
标签: c++ c++14 template-meta-programming boost-hana