0

テンプレート operator-> を便利に呼び出す方法はありますか? バリアントのようなクラスでそのような可能性があるのはクールだろう

例: (これは単なる例です)

struct base_t
{
   template<class T>
   T* operator->()
   {
      return reinterpret_cast<T*>(this);
   }
};

int main(int argc, char* argv[])
{
   base_t x;
   x.operator-><std::pair<int,int>>()->first; //works, but inconvenient
   x<std::pair<int,int>>->first; // does not work
   x-><std::pair<int,int>>first; //does not work

   return 0;
}

証明が必要です =)

4

1 に答える 1

1

いいえ、それは本物ではありません、これも本物ではありません

struct base_t
{
   template<class T>
   T operator () ()
   {
      return T();
   }
};

int main()
{
   base_t x;
   x.operator ()<int>(); // works
   x.()<int>(); // not works
}

T::operator->() が存在し、演算子が最適一致関数として選択されている場合、式 x->m は型 T のクラス オブジェクト x に対して (x.operator->())->m として解釈されます。過負荷解決メカニズムによる

後置式 -> templateopt id-式

後置式 -> 疑似デストラクタ名

したがって、構文x-><T>は単純に正しくありません。

于 2013-04-05T12:11:34.537 に答える