函数调用中 std::array 中元素的确切数量

Urw*_*ald 9 c++ metaprogramming stdarray

我有一个需要std::array给定大小的函数N

void func(std::array<int,3> x) {
  // do something
}

int main() {
  func({4,4,4}) // works
  func({4}) // works as well
}
Run Code Online (Sandbox Code Playgroud)

我理解为什么第二个调用也有效,我的问题是:有没有办法在编译时检查我实际传递了多少参数?

背景:我不想允许第二次调用,我希望用户准确传递N参数。

P K*_*mer 15

您可以像这样使函数更具限制性:

#include <type_traits>
    
// let sfinae disable mismatches
template<std::size_t N>
auto func(const int (&v)[N]) -> std::enable_if_t<N==3,void>
{
  // do something
}
        
int main() 
{
    func({4,4,4}); // works
    func({4}); // no longer compiles
}
Run Code Online (Sandbox Code Playgroud)

演示: https: //onlinegdb.com/FHlRINqCZ

  • 除了 `-&gt; std::enable_if_t&lt;N==3,void&gt;` 之外,还值得一提的是 `requires (N == 3)`,因为它的意图更容易理解。 (11认同)
  • @cigien 我通常在 C++17 上进行测试(我认为这是一个广泛使用的版本),但你的版本对 C++20 来说是一个受欢迎的补充 (2认同)