gpt4 book ai didi

c++ - 返回值取决于其通用类型的函数模板中的无效转换错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:32:28 25 4
gpt4 key购买 nike

我有以下函数模板

template<typename T>
T foo(){
if(std::is_same<T,int>::value){
return 1;
}
if(std::is_same<T,std::string>::value){
return "Hello";
}
}

我想像这样应用它:

int main(){
std::cout << foo<int>() << std::endl; // 1
std::cout << foo<string>() << std::endl; // "Hello"
}

如果我尝试编译我的模板,编译器会抛出以下错误: error: cannot initialize return object of type 'int' with an lvalue of type 'const char [6]' .

如果我删除第二个 if声明一切都编译得很好,我得到了正确的输出因此我猜比较 std::is_same<T,int>::value按预期工作。

编译器似乎检测到 T 的类型, 检查是否所有 return语句匹配它并抛出错误,因为 std::string不能隐式转换为 int .

有没有人有解决方案或其他解决方法来满足我的意图?

编辑

解释一下我的意图:我正在为数据库游标类编写一个包装类。由于通常定义这些游标,它有几个成员函数,如 getInt()getString() .我的想法是实现一个通用的 get<T>()使用依赖于 T 的相应游标成员函数.

最佳答案

忘记 if 语句并完全特化模板函数:

template<>
int foo<int>(){
return 1;
}

template<>
std::string foo<std::string>(){
return "Hello";
}

关于c++ - 返回值取决于其通用类型的函数模板中的无效转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43218934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com