【问题标题】:typedef std containers?typedef 标准容器?
【发布时间】:2009-02-18 18:10:17
【问题描述】:

我想做

typedef deque type; //error, use of class template requires template argument list
type<int> container_;

但是那个错误阻止了我。我该怎么做?

【问题讨论】:

    标签: c++ templates typedef


    【解决方案1】:

    你不能(直到 C++0x)。但它可以被模仿:

    template<typename T>
    struct ContainerOf
    {
      typedef std::deque<T> type;
    };
    

    用作:

    ContainerOf<int>::type container_;
    

    【讨论】:

      【解决方案2】:

      deque 不是类型。它是一个模板,用于在给定参数时生成类型。

       deque<int> 
      

      是一种类型,所以你可以这样做

       typedef deque<int> container_
      

      【讨论】:

        【解决方案3】:

        你不知道,C++ 还不支持这种类型定义。你当然可以说;

        typedef std::deque <int> IntDeque;
        

        【讨论】:

          【解决方案4】:

          您遇到了一个错误,因为您没有在 deque 中指定 int。

          但请注意:Template typedef 是公认的 C++0x 功能。尝试使用最新的 g++

          【讨论】:

            【解决方案5】:

            你可以这样做:

            #define type deque
            

            但这有几个缺点。

            【讨论】:

            • 是的,它会将“typename”之类的东西变成“dequename”(我知道“type”是一个例子,但它仍然是一个大问题)。我会说不惜一切代价避免这种情况。
            • @EvanTeran 我意识到这是一个非常古老的问题,所以这个回复可能没有那么有帮助,但#define 不只是对给定的字符串进行查找和替换;它只替换与指定标识符完全相同的标识符。在这种情况下,“type”将被替换,但“typename”、“types”、“Type”、“this_type”和包含单词“type”的字符串文字不会被替换。不过,对这样的 typedef 使用宏仍然是个坏主意。
            • @EvanBailey LOL,你完全正确,它只会替换整个标识符匹配。我真的很惊讶,有人花了 12 年才注意到我在这件事上完全错了。幸运的是,大家的共识仍然是这通常是个坏主意。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多