完整標題:如何強迫struct使用者在使用copy assignment時,另外對其他某值另外賦值?
開發平台(Platform): (Ex: Win10, Linux, ...)
Mac
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
clang 14
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
X
問題(Question):
想請問各位C/CXX先進,我有個需求就是我有一個MyUniquePtr 繼承自unique_ptr,還會有
其他一般的struct包含了這個MyUniquePtr。那我在過程中我會有copy assignment的行為,
我只想要他copy那些一般的Plain Old Data,那個MyUniquePtr務必要求用的人另外對MyUni
quePtr賦值。
想請問我有無辦法用一些clang語法,包含preprocessing,在compile階段就發現使用者是
否有另外對MyUniquePtr賦值?我有一些想法但不知道是否可行
給MyUniquePtr的copy assignment overload中,標記為deprecated
1. 假如使用者有MyUniquePtr賦值,那他可標記一些東西,例如#define,或是某些flag?
這樣可以繞過這個deprecated(或搭配-Werror=deprecated-declarations?)
2. 假如使用者有額外賦值,他就可以用#pragma clang diagnostic ignored "-Wdeprecate
d-declarations"把他那賦值的包起來來silence error,但這deprecated是在別的header,
包在這邊看起來沒什麼用
想請問各位有什麼其他方法可以做到嗎,簡單說就是如果使用者沒有另外賦值,編譯就報錯
。如果有另外賦值,那就沒事。謝謝指教
餵入的資料(Input):
MyStruct s1;
MyStruct s2;
1. s1 = s2;
2. s1 = s2; s1.p_char = new char(100);
預期的正確結果(Expected Output):
1. 編譯失敗
2. 可編譯成功
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
https://godbolt.org/z/3M5KveYWa
圖片供手機使用者方便閱讀
https://imgur.com/bXyms0J
補充說明(Supplement):
只能用到c++11