c++ - 如何从对象实例中获取成员 typedef

标签 c++ templates typedef

在MSVC2010中给出如下代码:
错误 C2039:“my_type”:不是“全局命名空间”的成员

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

C<int> c;

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

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

最佳答案

从一堆非常有用的评论中,我得到了一个可行的解决方案。感谢大家。 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!!
  }; 
}

关于c++ - 如何从对象实例中获取成员 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30199241/

相关文章:

c++ - 将 pcm 转换为 mp3(使用 LAME)导致 mp3 文件中出现 "clicks"

c++ - 素数实现

c++ - 导致奇怪行为的共享指针

c++ - 使用模板参数中定义的类型

c++ - 检查 C++11 中的类型 #defines

c++ - 如何为大型网格实现 VBO 并获得流畅的动画?

c++ - 理解c++中模板的问题

c++ - 矩阵转置模板

c - 为什么定义一个 _struct 然后在没有 _ 的情况下对其进行类型定义?

C++ 模板 + typedef