如果可能,将 C++ 指针解引用到类型

Cod*_*ner 2 c++ typedef class c++11

class Foo {
public:
    static const int BAR = 2;
};

typedef Foo T1;
typedef Foo* T2;

int value1 = T1::BAR;  // This works.
int value2 = T2::BAR;  // This doesn't work.
Run Code Online (Sandbox Code Playgroud)

可以BAR从中提取的值T2吗?

我正在使用 c++-11。

我想这将是不好的做法,但我很好奇是否可以做到。

Ast*_*ngs 6

是的。

您可以使用特征去除指针:

int value2 = std::remove_pointer<T2>::type::BAR;
Run Code Online (Sandbox Code Playgroud)

或者(C++14 起):

int value2 = std::remove_pointer_t<T2>::BAR;
Run Code Online (Sandbox Code Playgroud)

参考现场演示

这甚至不是坏习惯,除非有一些更具表现力的方式来实现您的真正目标。