C ++嵌套结构的typedef(元类)编译错误

时间:2016-02-01 08:56:45

标签: c++ template-meta-programming

我想创建嵌套的模板化结构typedef来创建一个带元方法的元类,它可以有不同的参数。示例代码如下:

#include <iostream>
using namespace std;

template <int one, int two, int three>
struct vector_c{
    enum{
    v1 = one,
    v2 = two,
    v3 = three
    };

    template <typename vector>
    struct sum{
        typedef vector_c<
            one+vector::v1,
            two+vector::v2,
            three+vector::v3
        > type;
    };
};


int main() {
    vector_c<1,2,3>::sum<vector_c<3,2,1>>::type asdf;
    return 0;
}

这给了我以下错误:

  

prog.cpp:24:错误:':: type'尚未声明为prog.cpp:24:错误:   模板参数3无效prog.cpp:24:错误:模板参数1   无效

示例可以在这里找到:

https://ideone.com/9BQ2FI

我如何实现目标?有可能吗?

1 个答案:

答案 0 :(得分:2)

这应该适用于C ++ 11,看起来你用一个很老的编译器尝试过这个。

>>

在C ++ 11之前,如果没有嵌套模板的空格,则无法vector_c<1,2,3>::sum<vector_c<3,2,1> >::type asdf; // ^ 。如果你添加一个空格它应该工作:

Computer Name,Msg 1,Msg 2
COMPUTER 1,Windows 8,Another msg
COMPUTER 2,Windows XP,Yet again another msg
COMPUTER 3,Access Denied,
COMPUTER 4,Windows 7,Message
COMPUTER 5,Access Denied,