我一直在学习可变参数模板,并与this excellent blog post的帮助下,我已经成功地编写一个函数模板even_number_of_args
它返回它接收参数个数是否整除2是否可以编写一个函数模板来返回参数个数是否可以被N整除?
#include <iostream>
bool even_number_of_args() {
return true;
}
template <typename T>
bool even_number_of_args(T _) {
return false;
}
template<typename T, typename U, typename... Vs>
bool even_number_of_args(T _, U __, Vs... vs) {
return even_number_of_args(vs...);
}
int main() {
std::cout << even_number_of_args() << std::endl; // true
std::cout << even_number_of_args(1) << std::endl; // false
std::cout << even_number_of_args(1, "two") << std::endl; // true
std::cout << even_number_of_args(1, "two", 3.0) << std::endl; // false
std::cout << even_number_of_args(1, "two", 3.0, '4') << std::endl; // true
}
我想知道是否可以编写一个函数模板,该模板使用N
作为模板参数,并返回它收到的参数数量是否为N
的倍数。例如,该功能可以是这个样子:
number_of_args_divisible_by_N<1>(1, "two", 3.0, '4'); // true
number_of_args_divisible_by_N<2>(1, "two", 3.0, '4'); // true
number_of_args_divisible_by_N<3>(1, "two", 3.0, '4'); // false
number_of_args_divisible_by_N<4>(1, "two", 3.0, '4'); // true
一般FYI:返回值是一个编译时间常量。 – iammilind
'std :: integral_constant'在我看来是更好的返回类型。 :) –
Yakk
我认为对于不熟悉C++元编程习语的人来说可能会更困惑一些。不过,我会将其作为替代方式进行编辑。 – krzaq