2013年1月20日日曜日

directing of friend to a template class

次のC++コードは翻訳できない。
friendを加えれば翻訳できるのだけど、この状況に適したfriendを書けるかな?(╹◡╹)
(設計を変えようよ!という落ちは無しだよ)


class A {
  void f() { }
};

template<class T>
class B
{
  A& a;
public:
  B(A&& a_) : a(a_) { }
  void f() { a.f(); }
};

int main() {
  B<decltype(nullptr)>(A()).f(); // oops!
}

ヒント: class Aの定義にfriendを入れれば良いのだけど10択にするよ(╹◡╹)


  1.   template <class T> friend class B;
  2.   template <class T> friend class B<T>;
  3.   friend template <class T> class B;
  4.   friend template <class T> class B<T>;
  5.   template <> friend class B;
  6.   template <> friend class B<>;
  7.   friend template <> class B;
  8.   friend template <> class B<>;
  9.   friend class B;
  10.   friend class B<>;

実はこれ、ついさっきうっかり間違えてコンパイラーに怒られたので備忘録を兼ねて書いたよ。

正解は 1. なのでした(╹◡╹)
ちょっと考えてみるとまあ納得はできる気はします。

0 件のコメント:

コメントを投稿