完整标题:如何强迫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