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