尝试在模板 c++ 中返回变量时出错
Errors when trying to return variables in template c++
所以我试图在Windows中获取剪贴板的内容,因为它可以是任何类型,我使用模板来获取它,但是在尝试构建时,Visual Studio 2013 RC发送此错误:
Error 1 error C2440: 'return' : cannot convert from 'char *' to 'double'
Error 2 error C2440: 'return' : cannot convert from 'double' to 'char *'
Error 3 error C2440: 'return' : cannot convert from 'int' to 'char *'
Warning 4 warning C4244: 'return' : conversion from 'double' to 'int', possible loss of data
Error 5 error C2440: 'return' : cannot convert from 'char *' to 'int'
这是代码:
template<typename tn>
tn GetClipboardContents()
{
HANDLE h_clip;
double d_clip;
int i_clip;
char* str_clip;
if (OpenClipboard(NULL))
{
h_clip = GetClipboardData(CF_TEXT);
if (typeid(tn).name() == "double")
{
d_clip = atof((char*)h_clip);
}else if (typeid(tn).name() == "int"){
i_clip = atoi((char*)h_clip);
}else{
str_clip = (char*)h_clip;
}
CloseClipboard();
}
if (typeid(tn).name() == "double")
return d_clip;
else if (typeid(tn).name() == "int")
return i_clip;
else
return str_clip;
}
提前谢谢。
您有多个返回路径,这些路径返回不同的类型。您需要使用模板重载,类似于:
template <typename tn>
tn GetClipboardContents();
template <>
double GetClipboardContents<double>()
{
// Add double implementation here
}
template <>
int GetClipboardContents<int>()
{
// Add int implementation here
}
对其他类型重复此操作
一个函数不能有两个 return
语句,每个语句都有不同的类型,除非每个语句都与函数的返回类型有有效的收敛。
例如:
int foo (bool flag) {
if (flag) return "hi";
return -1;
}
第一个return
无效。您的模板函数也有类似的问题。对于 tempalte 函数的任何给定实例化,至少有一个其他返回值存在转换问题。
解决此问题的一种方法是使用某种自定义结果对象,该对象可以由您尝试返回的三种类型中的任何一种初始化。
解决此问题的另一种方法是针对每个返回类型专用化模板,以便每个实例仅返回单个有效类型。
相关文章:
- 如何返回变量而不是变量的数值
- 函数,返回变量c++占用的内存位置的大小
- C++中局部变量和返回变量的构造和析构
- 我们如何在范围消失时通过引用返回变量
- 沿枚举 c++ 返回变量类型
- 在 Py_BuildValue 中返回变量字符串
- 递归返回语句无法正确返回变量
- 返回变量为 void (*)(void)
- 地址运算符是否返回变量引用的对象的地址
- 从函数返回变量地址时如何修复"与局部变量关联的堆栈内存地址"?
- 如何访问Python中编译的多个返回变量
- Binary_search通过其成员函数的返回变量[C ]找到类对象
- C++函数中声明和返回变量,并在主函数中使用它
- 从 C++ 返回对对象的引用时,是否需要在返回变量中使用 "&" 运算符?
- 函数返回看似随机的数字,而不是返回变量的值
- 从函数返回变量的链表
- 通过函数参数中的引用返回变量
- C++动态内存分配.将动态分配的 char* 返回变量数组分配给 char 变量
- 传递或返回变量时并不总是调用复制构造函数
- 尝试在模板 c++ 中返回变量时出错