索引上的static_assert在编译时知道

时间:2017-02-12 23:32:30

标签: c++ c++11 runtime compile-time static-assert

有没有办法静态断言编译时已知的索引和运行时断言否则?示例:

"Uncaught TypeError: myCSV[i].filter is not a function"

2 个答案:

答案 0 :(得分:3)

你可以简单地抛出异常或断言。它将在constexpr上下文中编译失败。这仅适用于在constexpr上下文中评估投掷条件的情况。 请注意,某些版本的gcc中存在一个错误,可以阻止抛出工作。

答案 1 :(得分:1)

我不认为用单一功能可以获得你想要的东西。

即使您开发了constexpr函数,我也不认为您能够检测运行时执行的时间以及执行编译时的行为并以不同的方式执行。

但你可以开发不同的功能。

例如,模板get<>(),其中模板参数是索引,只能与编译时已知的索引一起使用,并且可以执行static_assert()和{{ 1}},可以通过运行时检查接收在运行时计算的索引。

En passant:

1)我像往常一样在STL中建议使用at(std::size_t)进行绑定的检查访问,使用at()进行绑定的未经检查的访问

2)我建议使用无符号索引,或者你必须检查索引是否为operator[]()

以下是一个工作示例

>= 0