gpt4 book ai didi

c++ - 我无法理解一些 C++ 模板代码

转载 作者:行者123 更新时间:2023-11-28 01:54:06 25 4
gpt4 key购买 nike

我正在阅读一些代码,但我不知道如何理解 TH_convert<Elements>::t()... .

  1. 我在谷歌上搜索并发现 ...可用于可变数量的参数,如 printf(char **, ...) .但是,下面几行是不同的。

  2. 我看到有人将成员函数声明为 void test(...) .这是正确的吗,因为可变参数的函数需要第一个参数。

class TH_convert{
public:
typedef std::tuple<Element> t;
};

template<typename... Elements>
class State{
public:
typedef decltype(std::tuple_cat(typename TH_convert<Elements>::t()...)) t;
};

最佳答案

我会逐个分解它。

template<typename... Elements>
class State{
//...
};

这定义了一个 variadic class template称为状态,它采用任意数量的模板参数。 State<int,bool>是它的有效特化,如 State<Foo,Bar,Baz,Qux>甚至State<> .

decltype(/*...*/)

decltype 基本上替换为您在 /*...*/ 中输入的任何表达式的类型.

typedef decltype(/*...*/) t;

这使得 t /*...*/ 的任何类型的 typedef是。

typename TH_convert<T>::t()

这将创建一个类型为 TH_convert<T>::t 的对象,与 std::tuple<T> 相同,鉴于 TH_convert 的定义.你需要typename因为它是 dependent type .

std::tuple_cat(typename TH_convert<Elements>::t()...)

这调用了 std::tuple_cattypename TH_convert<T>::t()对于每个 T在参数包中 Elements .所以对于 State<int,bool> , 相当于:

std::tuple_cat(TH_convert<int>::t(), TH_convert<bool>::t())

对于 State<Foo,Bar,Baz,Qux>这与:

std::tuple_cat(TH_convert<Foo>::t(), TH_convert<Bar>::t(),
TH_convert<Baz>::t(), TH_convert<Qux>::t())

所以,将所有这些放在一起:

typedef decltype(std::tuple_cat(typename TH_convert<Elements>::t()...)) t;

这使得 t std::tuple_cat 结果类型的 typedef将 TH_convert<T>::t() 的结果放在一起对于每个 TElements .

关于c++ - 我无法理解一些 C++ 模板代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41846609/

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