我一直在學習可變參數模板,並與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