我有一个简单的类,我想重载运算符,如下所示
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;}
它有效。感谢所有回复。
答案 0 :(得分:5)
如果您希望函数调用是隐式的,那么您必须将模板应用于类,如下所示:
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; }
};
答案 1 :(得分:3)
您要做的是提供从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;
}
这是你需要的吗?
答案 2 :(得分:1)
当尝试从像
这样的代码中推断模板参数时,编译器会面临一个非常模糊的问题模板 T operator()()const {return first; }
因为
int i = obj();
T不仅可以是int,而且任何类型“castable”到int。
答案 3 :(得分:0)
你试过int i = obj<int>();
吗?
答案 4 :(得分:0)
我不知道为什么这是一个模板,你总是返回一个int,对吗? 感谢