0

我附上了(再次,我们有问题的第一篇文章)以下代码。

它不能与 VS2012 一起编译:

struct POD1
{
    int x; 
};

struct POD2
{
    char x; 
};

class A
{
public:
    typedef POD1 innerType;
    void doSomthing(POD1 t);
};


class B
{
public:
    typedef POD2 innerType;
    void doSomthing(POD2 t) { }
};


template<typename T>
class X
{
public:
    using myType = typename T::innerType;   // Doesn't work
    void foo(myType  bar) {}  // Doesn't work
};

int _tmain(int argc, _TCHAR* argv[])
{

    X<B> x;
    POD2  b; 
    x.foo(b);


    return 0;
}

我得到的错误:

1>c:\users\user\documents\visual studio 2012\projects\try\try\try.cpp(36): error C2873: 'myType' : symbol cannot be used in a using-declaration
1>          c:\users\user\documents\visual studio 2012\projects\try\try\try.cpp(38) : see reference to class template instantiation 'X<T>' being compiled
1>c:\users\user\documents\visual studio 2012\projects\try\try\try.cpp(36): error C2143: syntax error : missing ';' before '='
1>c:\users\user\documents\visual studio 2012\projects\try\try\try.cpp(36): error C2238: unexpected token(s) preceding ';'
1>c:\users\user\documents\visual studio 2012\projects\try\try\try.cpp(37): error C2061: syntax error : identifier 'myType'

编辑 模板别名不适用于 VS2012。任何解决方法?

盖伊

4

2 回答 2

3

如果你看一下这里,你会看到 VS2012 不支持别名模板。所以这个功能暂时还不能使用。

于 2013-07-11T11:41:20.207 回答
2

简单的 typedef 应该可以工作:

template<typename T>
class X
{
public:
    typedef typename T::innerType myType;
    void foo(myType  bar) {}
};
于 2013-07-11T11:46:59.740 回答