模板运算符 - >

时间:2013-04-05 12:04:10

标签: c++ templates

有没有办法方便地调用模板运算符 - > ? 在像变种

这样的类中有这种可能性会很酷

例如:(这只是一个例子)

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

我需要证明=)

1 个答案:

答案 0 :(得分: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-&gt;(),则表达式x-> m被解释为(x.operator->()) - > m表示类型为T的类对象x 存在且是否通过重载解析机制选择运算符作为最佳匹配函数

postfix-expression - &gt; templateopt id-expression

postfix-expression - &gt;伪析构函数名

因此,语法x-><T>完全不正确。