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

aemubtdh  于 2023-10-20  发布在  其他
关注(0)|答案(2)|浏览(81)

我有一个函数,它接受给定大小的N

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

int main() {
  func({4,4,4}) // works
  func({4}) // works as well
}

我明白为什么第二个电话也有效,我的问题是:有没有办法在编译时检查我到底传递了多少个参数?
背景:我不希望允许第二次调用,我希望用户传递的参数正好是N

rkue9o1l

rkue9o1l1#

你可以像这样让函数更严格:

#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
}

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

ylamdve6

ylamdve62#

或者,您可以添加一个删除的重载:

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

template <std::size_t N>
requires (N != 3)
void func(const int(&)[N]) = delete;

Demo

相关问题