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

q09*_*987 3 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);
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Pet*_*der 5

没有函数部分特化这样的东西.这是一个过载.

例如

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
Run Code Online (Sandbox Code Playgroud)

将特殊化与重载混合时要小心,因为它并不总是像您认为的那样工作.