gpt4 book ai didi

c++ - 如何根据表达式在 Boost.Hana 中是否有效来过滤类型元组?

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:06 27 4
gpt4 key购买 nike

在简化示例中,我在一个元组中有两个类型,我想创建另一个元组,它只包含表达式有效的类型(在这个示例中我使用 + 运算符)。

我的尝试是这样的:

#include <boost/hana.hpp>
#include <boost/hana/experimental/printable.hpp>

#include <iostream>

namespace hana = boost::hana;

struct foo {};

const auto result{hana::filter(hana::tuple_t<int, foo>, [](auto type) {
const auto has_plus{hana::is_valid([](auto t)
-> decltype((void) hana::traits::declval(t) + hana::traits::declval(t)) {})};

return has_plus(type);
})};

int main()
{
std::cout << hana::experimental::print(result) << std::endl;
}

这会输出“()”,即。在我期望元组 result 的位置没有匹配的类型应包含 type<int> .

我正在使用与 Boost 1.62 一起打包的 Boost.Hana 版本。

最佳答案

您的问题与运算符优先级有关。

(void)hana::traits::declval(t) + hana::traits::declval(t)

相同
((void)hana::traits::declval(t)) + hana::traits::declval(t)

以下会产生您预期的结果:

(void)(hana::traits::declval(t) + hana::traits::declval(t))

demo

关于c++ - 如何根据表达式在 Boost.Hana 中是否有效来过滤类型元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40318367/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com