gpt4 book ai didi

c++ - 使用函数模板时出错

转载 作者:行者123 更新时间:2023-11-30 02:39:34 25 4
gpt4 key购买 nike

我想创建一个函数,为不同的输入字符串返回不同类型的数据类型。我正在为其使用模板,但似乎我犯了一些错误。

template<typename S>
S select(string type){

int integer;
float floaty;
char character;
string strings;

if(type=="int")
return integer;

if(type=="char")
return character;

if(type=="float")
return floaty;

if(type=="string")
return strings;
}

当我运行它将字符串参数 int 时,它给出了这个错误。

    sam.cpp:771:13: error: no matching function for call to ‘select(std::string&)’
select(type);
^
sam.cpp:771:13: note: candidates are:
In file included from /usr/include/x86_64-linux-gnu/sys/types.h:219:0,
from /usr/include/stdlib.h:314,
from Markup.h:12,
from sam.cpp:3:
/usr/include/x86_64-linux-gnu/sys/select.h:106:12: note: int select(int, fd_set*, fd_set*, fd_set*, timeval*)
extern int select (int __nfds, fd_set *__restrict __readfds,
^
/usr/include/x86_64-linux-gnu/sys/select.h:106:12: note: candidate expects 5 arguments, 1 provided
sam.cpp:17:3: note: template<class S> S select(std::string)
S select(string type){
^
sam.cpp:17:3: note: template argument deduction/substitution failed:
sam.cpp:771:13: note: couldn't deduce template parameter ‘S’
select(type);

如果方法不对,有更好的方法,请分享,谢谢。

最佳答案

在 C++ 中,模板类型推导基于参数而不是返回类型,因此在您的特定情况下,当您调用函数 select 时,您必须明确指定模板参数。

then how will I achieve what I want to do with this function?

使用模板特化。

template<typename S>
S select(){
static_assert("Not Implemented");
}

template<> int select<int>() {
int integer;
//To Do
return integer;
}

template<> float select<float >() {
float floaty;
//To Do
return floaty;
}
//Remaining Specialization

并使用显式模板参数调用相应的特化

int main()
{
int _integer = select<int>();
float _float = select<float>();
..........
}

关于c++ - 使用函数模板时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29721425/

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