如何从对象实例获取成员typedef

时间:2015-05-12 18:54:40

标签: c++ templates typedef

在MSVC2010中,以下代码给出:
error C2039: 'my_type' : is not a member of ''global namespace''

template<typename T>
class C
{
public:
    typedef T my_type;
};

C<int> c;

auto f = [&c]() { 
    decltype(c)::my_type v2;   // ERROR C2039
};

我找到了一种解决问题的蹩脚方法,但我想知道当你只有一个对象实例时,获取typedef的正确方法是什么。

1 个答案:

答案 0 :(得分:1)

从一组非常有用的评论我得到了一个有效的解决方案。感谢大家。 remove_reference用作身份对象的双重目的。

template<typename T>
class C {
public:
  typedef T my_type;
};

void g() {
  C<int> c;

  auto f = [&c]() {
    typedef remove_reference<decltype(c)>::type::my_type my_type;
    my_type v;   // Works!!
  }; 
}