Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我不能理解一些c++;模板代码_C++ - Fatal编程技术网

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。。。。是的,我没有足够简化。复杂的气味是为了它自己吗