gpt4 book ai didi

c++ - 从 Boost Hana 元组转换为标准 vector

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

我正在尝试在编译时从 boost::hana::tuple 创建一个 std::vector,如下所示:

boost::hana::tuple<std::string> namesString{ "Hello", "World" };
std::vector<std::string> namesStringVector{};
while(!(hana::is_empty(namesString)))
{
namesStringVector.emplace_back(hana::front(namesString));
hana::drop_front(namesString);
}

这显然行不通,因为 while 循环不在编译时运行。

我们如何在 Boost::Hana 中实现这种效果? IE。什么样的编译时 Hana 构造允许我们执行此转换?我试过做

    namesStringVector = (std::vector<std::string>)namesString;

hana::to < std::vector < std::string > >(namesString);

但它告诉我在这两种情况下都不存在这样的转换。

最佳答案

除了 Louis 解决的问题之外,还有一些与您尝试使用元组的方式有关的其他问题。请注意,元组的长度或其中的类型不能更改,因为类型在 C++ 中是完全不可变的,因此您必须从纯函数式编程的角度考虑。

您调用 is_empty将始终返回 true,并且 drop_front不能改变输入值,它只返回一个删除了前面元素的新元组。 (在您的情况下,它将是 tuple<>,它是空的)。

您可能想重新考虑将元组转换为 vector 的用例,但这里有一个示例,希望能帮助您入门。

#include <boost/hana.hpp>
#include <iostream>
#include <string>
#include <vector>

namespace hana = boost::hana;


template <typename T>
constexpr auto to_vector = [](auto&& ...x) {
return std::vector<T>{std::forward<decltype(x)>(x)...};
};

int main() {
auto xs = hana::make_tuple("Hello", "World");

auto vec = hana::unpack(xs, to_vector<std::string>);

for (auto const& x : vec) {
std::cout << x << ' ';
}

std::cout << '\n';
}

关于列表类型的说明:

  • std::vector有运行时长度和单一类型元素。
  • std::array具有编译时长度和单一类型元素。
  • hana::tuple有一个编译时长度,任何元素都可以是任何
    类型。

关于c++ - 从 Boost Hana 元组转换为标准 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50535913/

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