3
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);
}

给定上面的代码片段,我们是定义一个重载函数还是一个部分特化的函数?

谢谢

4

3 回答 3

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

将专业化与重载混合时要小心,因为它并不总是像您想象的那样工作。

于 2012-05-19T19:27:40.090 回答
0

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

于 2012-05-19T19:26:54.750 回答
0

这是一个超载。函数的部分特化是不可能的。如果您尝试对某个函数进行部分特化,编译器会报错。在这种情况下,当您到达元组的末尾时,编译器会使用重载决议来选择第一个函数。

于 2012-05-19T19:29:34.673 回答