我想以兼容GCC 4.3.4和Clang 2.9的方式使用命名屬性來初始化結構。可以使用C++中的可移植方式使用命名屬性初始化POD結構嗎?
struct A {
unsigned int x;
};
// GCC: error: expected primary-expression before '.' token
A a = {
.x = 0xdeadbeef;
};
// Clang: error: use of GNU old-style field designator extension [-Werror,-Wgnu-designator]
A a = {
x : 0xdeadbeef;
};
我不能添加-Wno-GNU的標誌到CXXFLAGS因爲當時GCC將拒絕建立,因爲它不知道該標誌。如果沒有命名屬性,我不能使用初始化列表,因爲如果API更改,我們將遇到嚴重問題。
我需要的解決方案必須符合C++標準,同時保留這樣一個事實,即如果新屬性出現在結構中,它們應該是未初始化的(或最好是NULL)。結構是第三方,我不能以任何方式改變它們。
我不知道,針對特定的工具鏈的兩個特定版本算作是「便攜式」。 – 2011-04-19 12:39:57
「我需要的解決方案必須符合C++標準」 - 這是一個問題,因爲這些都不是標準的C++。 C++ 03沒有通過命名成員進行初始化,而GCC 4.3.4在其中沒有太多C++ 0x。 – 2011-04-19 13:08:36