[英]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.