我想要的是一些班級成員有時候是private
,其他時間是public
。這些成員應該可以被某些模塊訪問並且其他人無法訪問。私人/保護/公衆如何影響ABI?
成像這個類:
class Foo {
public:
...
private:
...
protected:
...
internal:
int x;
};
在模塊X的internal
定義爲:
#define internal public
,並在模塊Y它的定義爲:
#define internal private
所以真正的問題如果這個技巧是標準可接受的,或者它會改變類的簽名(或者它以任何方式。
我知道friend
和PIMPL
是這樣的工作,但friend
可以得到非常混亂和PIMPL
的性能(的間接和事實,你不能內聯)不是爲我工作的代碼庫可以接受上。
聽起來像是一個ODR違反,因此UB。 UB可能會做你想要的。 – nwp
成員的可見性不會通過編譯器傳遞到生成的代碼中,因此對ABI沒有影響,或者受到ABI的影響。 –
至於'內部宏',它的目的是什麼?它應該解決什麼問題?你有一個用例或需求或導致這種情況的設計?這有[XY問題]的氣味(http://xyproblem.info/)。也許是時候查看你的需求或設計了?這些「模塊」是否會連接在一起形成同一個程序的一部分? –