Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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++;:有没有办法从实例化模板中提取类型? //对STL容器执行操作的类模板 模板 结构foo{ T包含元素()的容器{ T-con; elee; con.推回(+++e); 返回con; }_C++_Templates - Fatal编程技术网

C++ C++;:有没有办法从实例化模板中提取类型? //对STL容器执行操作的类模板 模板 结构foo{ T包含元素()的容器{ T-con; elee; con.推回(+++e); 返回con; }

C++ C++;:有没有办法从实例化模板中提取类型? //对STL容器执行操作的类模板 模板 结构foo{ T包含元素()的容器{ T-con; elee; con.推回(+++e); 返回con; },c++,templates,C++,Templates,如您所见,将元素的类型放入templates的参数中是非常愚蠢的,因为它已经包含在容器的类型中 那么,从T中得到元素的类型有什么魔力吗 大量Thx:-)标准库中的每个“容器”都试图遵守。这个概念要求,给定一个容器T: T::value\u type是容器元素的类型 T::reference是容器元素的引用类型 T::const_reference是容器元素的常量引用类型 在特定示例中,可以通过以下方式提取元素类型: //a class template to do something to ST

如您所见,将元素的类型放入templates的参数中是非常愚蠢的,因为它已经包含在容器的类型中

那么,从T中得到元素的类型有什么魔力吗

大量Thx:-)

标准库中的每个“容器”都试图遵守。这个概念要求,给定一个容器
T

  • T::value\u type
    是容器元素的类型
  • T::reference
    是容器元素的引用类型
  • T::const_reference
    是容器元素的常量引用类型
  • 在特定示例中,可以通过以下方式提取元素类型:

    //a class template to do something to STL container
    template<typename T/*should be a STL container*/,typename Ele/*the type of element*/>
    struct foo{
    T a_container_with_an_element(){
        T con;
        Ele e;
        con.push_back(++++e);
        return con;
    }
    
    模板
    结构foo{
    容器a_容器_与_元素(){
    集装箱集装箱;
    typename容器::值\类型e;
    con.推回(+++e);
    返回con;
    }
    
    如果容器是标准库容器,则元素的名称是容器的嵌入名称,如下所示:

    template<typename Container>
    struct foo {
    Container a_container_with_an_element(){
        Container con;
        typename Container::value_type e;
        con.push_back(++++e);
        return con;
    }
    
    标准容器中有一些标准名称(例如,请参阅)和§23.2


    如果
    T
    应该是STL容器,则可以使用模板模板参数。它必须是支持
    push_back()
    的容器,并且我们将结合STL容器包含第二个“分配器”参数的事实

    在这种情况下,你可以使用

    X::value_type
    X::reference
    X::const_reference
    X::iterator
    X::const_iterator
    X::difference_type
    X::size_type
    
    template