C++ 我不能理解一些c++;模板代码
我正在阅读一些代码,但我不知道如何理解C++ 我不能理解一些c++;模板代码,c++,C++,我正在阅读一些代码,但我不知道如何理解TH\u convert::t()… 我在谷歌上搜索过,发现…可以用于不同数量的参数,比如printf(char**,…)。但是,以下几行是不同的 我看到有人将成员函数声明为void test(…)。这是否正确,因为变量参数的函数需要第一个参数 类THU转换{ 公众: typedef std::元组t; }; 模板 阶级国家{ 公众: typedef decltype(std::tuple_cat(typename TH_convert::t()…)t;
TH\u convert::t()…
…
可以用于不同数量的参数,比如printf(char**,…)
。但是,以下几行是不同的void test(…)
。这是否正确,因为变量参数的函数需要第一个参数类THU转换{
公众:
typedef std::元组t;
};
模板
阶级国家{
公众:
typedef decltype(std::tuple_cat(typename TH_convert::t()…)t;
};
我会把它一块一块地分解
template<typename... Elements>
class State{
//...
};
基本上替换为您在/*…*/
中输入的任何表达式的类型
typedef decltype(/*...*/) t;
这使得t
成为/*…*/
类型的类型定义
typename TH_convert<T>::t()
对于参数包元素中的每个t
,这将使用typename TH\u convert::t()
调用std::tuple\u cat
。因此,对于状态
,它相当于:
std::tuple_cat(TH_convert<int>::t(), TH_convert<bool>::t())
std::tuple\u cat(TH\u convert::t(),TH\u convert::t())
对于状态
,它与以下内容相同:
std::tuple_cat(TH_convert<Foo>::t(), TH_convert<Bar>::t(),
TH_convert<Baz>::t(), TH_convert<Qux>::t())
std::tuple_cat(TH_convert::t(),TH_convert::t(),
TH_convert::t(),TH_convert::t())
所以,把所有这些放在一起:
typedef decltype(std::tuple_cat(typename TH_convert<Elements>::t()...)) t;
typedef decltype(std::tuple_cat(typename TH_convert::t()…)t;
这使得t
成为std::tuple\u cat
结果类型的类型定义,将TH\u convert::t()
的结果与元素中的每个t
结合在一起,我将逐一分解
template<typename... Elements>
class State{
//...
};
基本上替换为您在/*…*/
中输入的任何表达式的类型
typedef decltype(/*...*/) t;
这使得t
成为/*…*/
类型的类型定义
typename TH_convert<T>::t()
对于参数包元素中的每个t
,这将使用typename TH\u convert::t()
调用std::tuple\u cat
。因此,对于状态
,它相当于:
std::tuple_cat(TH_convert<int>::t(), TH_convert<bool>::t())
std::tuple\u cat(TH\u convert::t(),TH\u convert::t())
对于状态
,它与以下内容相同:
std::tuple_cat(TH_convert<Foo>::t(), TH_convert<Bar>::t(),
TH_convert<Baz>::t(), TH_convert<Qux>::t())
std::tuple_cat(TH_convert::t(),TH_convert::t(),
TH_convert::t(),TH_convert::t())
所以,把所有这些放在一起:
typedef decltype(std::tuple_cat(typename TH_convert<Elements>::t()...)) t;
typedef decltype(std::tuple_cat(typename TH_convert::t()…)t;
这使得t
成为std::tuple\u cat
结果类型的类型定义,将TH\u convert::t()
中每个t
元素的t的TH\u convert()…
结果组合在一起。@Danh因为OP的意思是键入TH\u convert::t()
,这更有意义。我相当肯定TH\u convert()…
是一个打字错误。@Danh因为OP的意思是键入TH\u convert::t()…
,这更有意义。虽然我不确定为什么它不是typedef decltype(std::tuple\u cat(Elements())代码>,转换似乎是多余的here@Caleth我假设这是一个简化版本,否则它可能只是使用t=std::tuple代码>。。。。是的,我没有足够简化。虽然我不知道为什么它不是typedef decltype(std::tuple_cat(Elements()))t代码>,转换似乎是多余的here@Caleth我假设这是一个简化版本,否则它可能只是使用t=std::tuple代码>。。。。是的,我没有足够简化。复杂的气味是为了它自己吗