[英]Dereferencing C++ pointer to type if possible
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.
可以從T2
中提取BAR
的值嗎?
我正在使用 c++-11。
我想這將是不好的做法,但很好奇是否可以做到。
您可以創建T2
類型的 object 並訪問成員BAR
,如下所示:
int value2 = T2{}->BAR;
請注意,取消引用 null 指針以訪問 static 數據成員的格式是否正確尚有爭議。 無論這個解決方案是否正確,我都建議使用Asteroids With Wings 的答案,因為它更清楚地表達了代碼應該實現的意圖。
讓我們先看看錯誤(你應該總是這樣做):
<source>:11:14: error: 'T2' (aka 'Foo *') is not a class, namespace, or enumeration
int value2 = T2::BAR;// This doesn't work.
這很清楚。 Foo*
確實不是 class 類型、名稱空間或枚舉。
您可以通過std::remove_pointer
從類型中刪除指針:
int value2 = std::remove_pointer_t<T2>::BAR; // This is awkward, but no error
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.