以下语句是函数重载还是函数部分特化?

时间:2012-05-19 19:24:28

标签: c++ boost stl

template <typename Function> void for_each_element(
  const boost::tuples::null_type&, Function) {}

template <typename Tuple, typename Function> void     
  for_each_element(Tuple& t, Function func) {
    func(t.get_head());
    for_each_element(t.get_tail(),func);
}

鉴于上面的代码片段,我们是否定义了重载函数或部分专用函数?

谢谢

3 个答案:

答案 0 :(得分:5)

没有功能部分专业化这样的东西。这是一个过载。

e.g。

template <typename T, typename U>
void foo(T t, U u);

template <typename T>
void foo<T, int>(T t, int u); // Illegal: no partial specialisation of functions

template <typename T>
void foo(T t, int u); // OK

mixing specialisations with overloads时要小心,因为它并不总是像你想象的那样工作。

答案 1 :(得分:0)

超载。你不能部分专门化功能,即使你可以,你也有第二对<> - 括号。

答案 2 :(得分:0)

这是一个过载。功能的部分特化是不可能的。如果您尝试部分特化一个函数,编译器会抱怨。在这种情况下,当您到达元组的末尾时,编译器使用重载决策来选择第一个函数。