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