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 被解释为 (x.operator->())->m 用于类型 T 的类对象 x通过重载解决机制

后缀表达式-> templateopt id 表达式

后缀表达式 -> 伪析构函数名称

因此,语法x-><T>根本不正确。

于 2013-04-05T12:11:34.537 回答