如何将 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

Full example

Stupid workaround

是的,在这里使用 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