检查指定给std :: array编译时间的元素数

Chi*_*iel 2 c++ static-assert stdarray

我有一个性能关键代码,可以查询N个索引。如何static_assert在不牺牲性能的情况下检查是否给出了准确的N个索引?

#include <array>

template<int N>
void test(const std::array<int, N>& indices)
{
    // static_assert:  has three elements.
    return;
}

int main()
{
    test<3>({1, 2, 3}); // OK
    test<3>({1, 2});    // Needs to crash, because 2 < 3

    test<2>({1, 2, 3}); // Crashes, because 3 > 2
    test<2>({1, 2});    // OK

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*ica 6

如何使用static_assert检查编译时是否给出了三个索引

你不能 它们的数组大小为3,因此它将始终具有3个元素。当你做类似的事情

test({1, 2}); 
Run Code Online (Sandbox Code Playgroud)

该数组使用1和初始化前两个元素,2然后将最后一个元素清零。这是聚合初始化的工作方式,您无法更改。

您需要做的是为大小为1和2的数组添加重载并删除它们,或者您可以将函数更改为具有3个参数,然后必须使用3个值来调用它。