我有一个Flags类似于std::bitset替换旧代码库中的bitpacked整数的类.为了强制遵守较新的类,我想禁止从int类型中隐式转换.
enum class Flag : unsigned int {
none = 0,
A = 1,
B = 2,
C = 4,
//...
};
class Flags {
public:
Flags();
Flags(const Flag& f);
explicit Flags(unsigned int); // don't allow implicit
Flags(const Flags&);
private:
unsigned int value;
};
Run Code Online (Sandbox Code Playgroud)
我想只允许从Flag和Flags类型隐式构造和赋值.但是,我仍然希望一些函数调用Flags接受一个文字0,但不接受其他整数:
void foo(const Flags& f);
foo(Flags(0)); // ok but ugly
foo(1); // illegal because of explicit constructor
foo(0); // illegal, but I …Run Code Online (Sandbox Code Playgroud) 假设我有一个可以使用char数组指针构造的String类.是否有任何疯狂的方式,通过一些神奇的运算符重载,自由函数或预处理器宏来使类似Python的语法工作,自动将一个char数组文字自动转换为String?要进行此编译:
String a = "Foo".substr(1);
Run Code Online (Sandbox Code Playgroud)
我想一个疯狂的预编译sed语句可以做到这一点,但clang的能力范围内的东西将是首选.
c++ ×2