-, " ". , , , :
template<typename... Ts> void foo(Ts... ts);
... ( vararg, ). :
template<typename T> void foo(T... t);
template<typename T> void foo(T t...);
-, , , , for-loop. , "" .
template<typename T>
void foo(T t) {
std::cout << t;
}
template<typename T,typename... Us>
void foo(T t,Us... us) {
foo(t)
foo(us...);
}
, , enable_if "SFINAE", . , :
#include <type_traits>
#include <utility>
template<class T>
T min(T t) {
return t;
}
template<class T,class... Us>
typename std::common_type<T,Us...>::type
min(T t,Us... us)
{
auto lowest = min(us...);
return t<lowest ? t : lowest;
}
int main() {
min(1,2,3);
}
enable_if, .
template<class T,class... Us>
typename std::enable_if<
std::is_same<T,typename std::common_type<Us...>::type>::value,
T>::type
min(T t,Us... us)
{
auto lowest = min(us...);
return t<lowest ? t : lowest;
}
, , , is_same.
, , . initializer_list, KennyTM, , . , min max, , , initializer_list.
is_same<T,typename common_type<Us...>::type>?
min(), . , sizeof...(Us) . , , common_type<Us...> , is_same<T,common_type<Us...>> , .
min() min(us...). , Us... , , commont_type<Us...> , , is_same<T,common_type<Us...>> , T .
, , min(a,b) , a b . , min(c,a,b) min(a,b), min(c,a,b) , a b , , c . min(d,c,a,b) min(c,a,b), , min(d,c,a,b) , c, a b , , , d . Etc.