如何将 boost::hana::map 存储在 class 中?
How to store boost::hana::map inside a class?
我想将 boost::hana::map
存储在 class 中,这样我就可以在 class:
中编写这样的代码
if constexpr (boost::hana::contains(map_, "name"_s)){
std::cout << map_["name"_s] << std::endl;
}
但是我得到一个错误:
note: implicit use of 'this' pointer is only allowed within the
evaluation of a call to a 'constexpr' member function
与this->map_
:
note: use of 'this' pointer is only allowed within the evaluation of a call to a 'constexpr' member function
最有趣的是,如果我这样写:
if (boost::hana::contains(map_, "name"_s)){
std::cout << map_["name"_s] << std::endl;
}
我得到一个错误,没有这样的字段(它可能真的不存在,这就是为什么有一个 if constexpr
)。
然而,它是这样工作的(为什么?!):
auto map = map_;
if constexpr (boost::hana::contains(map, "name"_s)){
std::cout << map["name"_s] << std::endl;
}
我完全不明白它是如何工作的。在这种情况下应该如何使用 boost::hana::map
?
是的,在这里使用 this
似乎是正确的。
由于您尝试访问的信息应该可以在 compile-time 访问,一个简单的解决方法是使用整个表达式的类型。
void print_name()
{
if constexpr (decltype(boost::hana::contains(map, "name"_s)){})
{
Print(map["name"_s]);
}
}
请注意,hana::contains
returns 是从 std::integral_constant
派生的对象,因此包含的值为 static constexpr
,它隐式转换为 bool
。
我想将 boost::hana::map
存储在 class 中,这样我就可以在 class:
if constexpr (boost::hana::contains(map_, "name"_s)){
std::cout << map_["name"_s] << std::endl;
}
但是我得到一个错误:
note: implicit use of 'this' pointer is only allowed within the evaluation of a call to a 'constexpr' member function
与this->map_
:
note: use of 'this' pointer is only allowed within the evaluation of a call to a 'constexpr' member function
最有趣的是,如果我这样写:
if (boost::hana::contains(map_, "name"_s)){
std::cout << map_["name"_s] << std::endl;
}
我得到一个错误,没有这样的字段(它可能真的不存在,这就是为什么有一个 if constexpr
)。
然而,它是这样工作的(为什么?!):
auto map = map_;
if constexpr (boost::hana::contains(map, "name"_s)){
std::cout << map["name"_s] << std::endl;
}
我完全不明白它是如何工作的。在这种情况下应该如何使用 boost::hana::map
?
是的,在这里使用 this
似乎是正确的。
由于您尝试访问的信息应该可以在 compile-time 访问,一个简单的解决方法是使用整个表达式的类型。
void print_name()
{
if constexpr (decltype(boost::hana::contains(map, "name"_s)){})
{
Print(map["name"_s]);
}
}
请注意,hana::contains
returns 是从 std::integral_constant
派生的对象,因此包含的值为 static constexpr
,它隐式转换为 bool
。