【问题标题】:templates and typedef模板和类型定义
【发布时间】:2011-09-26 05:02:44
【问题描述】:

我有一些类似的课程:

 template<int DIMENSION, typename T> Vector { ... }  

现在,我想专门化类型名并使用 typedef 提供一个新类型。因此,我在 StackOverflow 上找到了答案 C++ typedef for partial templates

我这样做了:

template < int DIMENSION> using VectorDouble= Vector<DIMENSION, double>;

这无法编译(错误 C2988:无法识别的模板声明/定义)。这是因为我的编译器 (Visual Studio 2008) 不允许,还是我遗漏了什么?

谢谢。

【问题讨论】:

    标签: c++ templates typedef


    【解决方案1】:

    下一个标准支持模板类型定义——也就是说,基本上,只有真正、真正、真正新的编译器支持它。即使是最新的 VS 也不支持它,因为它不够新,C++0x 就是这样。

    在 C++03 中,通常使用结构体。

    template<int dimension> struct vector_double {
        typedef Vector<dimension, double> type;
    };
    

    现在可以像这样访问了

    int main() {
        vector_double<5>::type vec_double;
    }
    

    【讨论】:

      【解决方案2】:

      你提到的答案是:

      如果你有 C++0x/C++1x 编译器

      C++1x 还不是最新的,所以大多数编译器不支持它的特性。特别是 VC++9.0 (VS2008) 几乎不支持它们。 VC++10(VS2010)确实支持一些特性,但我不知道你需要的是不是其中之一。

      【讨论】:

      • 不幸的是,它不是。我们将不得不等待下一个版本。
      • 好的 - 我不知道 VC 2008 没有 C++0x/1x 功能。谢谢! (还有 9 分钟接受答案)
      • @WhitAngl:它确实支持一些,比如强范围的枚举和一些尖括号解析的东西。只是不是这个oe。
      猜你喜欢
      • 2011-11-30
      • 2010-09-20
      • 2011-02-17
      • 1970-01-01
      • 2011-06-27
      • 2013-03-17
      相关资源
      最近更新 更多