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

オーバーロード。関数を部分的に特殊化することはできません。たとえ可能であったとしても、2番目の<>括弧のペアが必要になります。

于 2012-05-19T19:26:54.750 に答える
0

過負荷です。関数の部分的な特殊化はできません。関数を部分的に特殊化しようとすると、コンパイラは文句を言います。この場合、タプルの最後に到達すると、コンパイラーはオーバーロード解決を使用して最初の関数を選択します。

于 2012-05-19T19:29:34.673 に答える