繁体   English   中英

operator()重载模板C ++

[英]operator () overload with template C++

我有一个简单的类,我想重载运算符,如下所示

class MyClass
{
   public:
      int first;

      template <typename T>
      T operator () () const { return first; }  
};

还有我所拥有的其他地方

MyClass obj;

int i = obj(); // This gives me an error saying could not deduce
               // template argument for T

有人可以帮我解决这个错误,非常感谢。 谢谢。

编辑:

这与operator()有关,例如,如果我替换函数

    template <typename T>
    T get() const { return first;}

有用。 感谢所有回复。

如果您希望函数调用是隐式的,那么您必须将模板应用于类,如下所示:

template <typename T>
class MyClass
{
  public:
  T first;

  T operator () () const { return first; }  
};

如果它应该被转换为另一种类型,那么它应该是:

template <typename T>
class MyClass
{
  public:
  T first;

  template <typename U>
  U operator () () const { return (U)first; }  
};

您要做的是提供从Data到userType的通用对流器。 考虑这样的事情:

#include<iostream>
#include<string>
using namespace std;
class Data{
    public:
        std::string str;
        double var;

        template <typename UserType>
        operator UserType() const { return  UserType(var);}
};

int main()
{
Data d;
d.var = 5.5;
cout << int(d);
cout<<"\n";
return 0;
}

这是你需要的吗?

当尝试从这样的代码中推断模板参数时,编译器将面临相当模糊的问题

template T operator()()const {return first; }

因为

int i = obj();

T不仅可以是int,而且可以是int的任何类型“castable”。

你试过int i = obj<int>();

我不知道为什么这是一个模板,你总是返回一个int,对吗? 谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM