[英]Issue with template in structs struct in c++
我在C ++中有一个结构,如下所示:
struct mystruct {
template <typename T>
T myproc() {
std::cout << "RETURNING T";
return T();
}
};
现在,该结构已经存在(这只是精确结构的示例副本),我需要使用它。 我想做的是调用方法myproc()
如下所示:
int _tmain(int argc, _TCHAR* argv[])
{
mystruct dummystruct;
int y = dummystruct.myproc();
return 0;
}
但这给了我这个编译错误:
error C2783: 'T mystruct::myproc(void)' : could not deduce template argument for 'T'
see declaration of 'mystruct::myproc'
我知道这是因为编译器无法知道T
是什么。
所以我的问题是,结构体中的函数声明是否正确? 我不这么认为,但是该代码已经存在于我们的旧代码之一中,所以我认为我应该对此发表意见。
所以我知道它是错误的,但是如果有人认为它是正确的,那么请向我解释如何使用它。
T
表示类型,例如int
。 写作return T;
将与return int;
相同return int;
当T
为int
。 return int;
有效?
您可以将函数模板调用为: dummy.myproc<int>();
。 您必须通过编写<int>
来告知T
是什么。 但是,如果函数采用了T
参数,则编译器将能够通过查看参数的类型来推断T
是什么。 例如dummy.myproc(2.3)
将解析为T
是double
dummy.myproc(2.3)
因为2.3
是双dummy.myproc(2.3)
。
我实际上对编译后的内容感到惊讶(如果最初这样做的话?)。
可以将模板视为一种类型。 您不会返回类型吗?
您的代码可以如下所示。
struct mystruct {
int myproc() {
std::cout << "RETURNING INT";
return int;
}
};
这不是很有效。
如果要返回默认的构造值,则需要加上括号。
struct mystruct {
template <typename T>
T myproc() {
std::cout << "RETURNING T";
return T();
}
};
但是,由于在s.myproc()
的上下文中不可推导template参数, s.myproc()
您将不得不执行s.myproc<mytype>()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.