3
我开始尝试使用constexpr
。
我想要实现的是验证literal
数值 作为ctor参数提供。
我开始用下面扔如果构建MyStruct
与价值< = 4使用constexpr验证构造函数中的文字参数
constexpr int validate(int v)
{
return (v > 4) ? v : throw exception();
};
struct MyStruct final
{
constexpr MyStruct(const int v)
: _v{validate(v)}
{
}
void add(int toAdd)
{
_v += toAdd;
}
int _v;
};
int main(int argc, char**)
{
constexpr MyStruct a{500}; // ok so far...
a.add(argc); // ...nope
MyStruct b{500}; // check at runtime :(
MyStruct c{argc}; // runtime check ok
}
标记如预期MyStruct
为constexpr
的作品,但这个防止调用add
,因为它是不可变的。
我认为这可以做到,因为我只针对文字值(在编译时已知)。
我想避免模板。
函数的参数不const表达式: - /你可以传递'std :: integral_constant'来允许在构造函数中进行编译时检查。 –
Jarod42