我需要在我的代碼如下兩個非常相似的結構:模板編程與位域
union ArrayEntry2Byte { union ArrayEntry4Byte {
struct { struct {
char foo : 1; char foo : 1;
short bar : 15; int bar : 31;
}; };
short foobar; int foobar;
// other code // other code
}; };
爲了增加這個代碼的可維護性和優雅,我想刪除使用模板編程的這些結構中的一種:
template<typename value_type>
union ArrayEntry {
struct {
char foo : 1;
value_type bar : 15;
};
value_type foobar;
// other code
};
但是,位字段給我帶來了麻煩。我需要的是這樣的:
value_type bar : (value_type == short ? 15 : 31);
但是,那顯然沒有正確的語法。我如何優雅地解決這個問題?
然而,這很好,我想我簡化了我的問題。想象一下,我們在union中有下面的struct:struct {char foo:1;短杆1:7; short bar2:8}''或者'struct {char foo:1; int bar1:15; int bar2:16}'。然後我不得不求助於0x499602D2的解決方案,不是嗎? – user1494080
@ user1494080是的,在這種情況下,如果使用某個公式不能從'value_type'類型的位數中獲取這些幻數,則必須首選0x499602D2的解決方案。 – Constructor
其實他們可以。 :)我不知所措,你的解決方案完美無缺。 – user1494080