gpt4 book ai didi

c++ - 元组和可变参数模板,这是如何工作的?

转载 作者:太空狗 更新时间:2023-10-29 21:19:12 24 4
gpt4 key购买 nike

我见过有人写(关于堆栈溢出本身,询问一些甚至高级的概念)类似的东西:

template<typename... args>
std::tuple<args...> parse(istream stream)
{
return std::make_tuple(args(stream)...);
}

并将其用作

auto tup = parse<int, float, char>(stream);

上面的代码是如何通过解析流来构造元组的?数据如何放入流中有什么具体要求吗?

最佳答案

要使其正常工作,必须从 std::istream 到指定为模板参数的所有类型进行隐式转换。

struct A {
A(std::istream&) {} // A can be constructed from 'std::istream'.
};

struct B {
B(std::istream&) {} // B can be constructed from 'std::istream'.
};

int main() {
std::istringstream stream{"t1 t2"};
auto tup = parse<A, B>(stream);
}

它的工作原理是扩展类型的可变参数列表,并使用提供的 std::istream 作为参数构造每个类型。然后留给每个类型的构造函数从流中读取。

另请注意,未指定构造函数的评估顺序,因此您不能期望可变参数列表中的第一个类型将首先从流中读取等。

目前的代码intfloatchar 等内置类型一起使用没有从 std::istream 到任何这些类型的转换。

关于c++ - 元组和可变参数模板,这是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28075079/

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