我有一个函数,它接受给定大小的N
N
void func(std::array<int,3> x) { // do something } int main() { func({4,4,4}) // works func({4}) // works as well }
我明白为什么第二个电话也有效,我的问题是:有没有办法在编译时检查我到底传递了多少个参数?背景:我不希望允许第二次调用,我希望用户传递的参数正好是N。
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
ylamdve62#
或者,您可以添加一个删除的重载:
void func(std::array<int, 3>) { // do something } template <std::size_t N> requires (N != 3) void func(const int(&)[N]) = delete;
Demo
2条答案
按热度按时间rkue9o1l1#
你可以像这样让函数更严格:
演示:https://onlinegdb.com/FHlRINqCZ
ylamdve62#
或者,您可以添加一个删除的重载:
Demo