从非编译时常量设置的局部变量确定模板类型? 我将TCPSPRILE从方案变成C++,部分是将字符串类型从“Car”(一个C++中实现的方案函数)转换为它的实际类型——我通过ReGEX演绎这个。我的问题是,我的函数必须根据输入字符串的性质返回不同的类型。我试
从非编译时常量设置的局部变量确定模板类型?从非编译时常量设置的局部变量确定模板类型? 我将TCPSPRILE从方案变成C++,部分是将字符串类型从“Car”(一个C++中实现的方案函数)转换为它的实际类型——我通过ReGEX演绎这个。我的问题是,我的函数必须根据输入字符串的性质返回不同的类型。我试,c++,templates,generics,types,generic-programming,C++,Templates,Generics,Types,Generic Programming,从非编译时常量设置的局部变量确定模板类型? 我将TCPSPRILE从方案变成C++,部分是将字符串类型从“Car”(一个C++中实现的方案函数)转换为它的实际类型——我通过ReGEX演绎这个。我的问题是,我的函数必须根据输入字符串的性质返回不同的类型。我试图通过用函数的模板名定义返回值来解决这个问题,但是由于它的最终值不是编译时常量,我如何才能做到这一点呢 //确定\u type.cpp #包括 #包括“示例3.cpp” std::string INT_REGEX=“^[-+]?\\d+$”,
我将TCPSPRILE从方案变成C++,部分是将字符串类型从“Car”(一个C++中实现的方案函数)转换为它的实际类型——我通过ReGEX演绎这个。我的问题是,我的函数必须根据输入字符串的性质返回不同的类型。我试图通过用函数的模板名定义返回值来解决这个问题,但是由于它的最终值不是编译时常量,我如何才能做到这一点呢
//确定\u type.cpp
#包括
#包括“示例3.cpp”
std::string INT_REGEX=“^[-+]?\\d+$”,
DOUBLE\u REGEX=“^[-+]?\\d+\\.\\d?$”,
布尔值_REGEX=“^(真|假)$”;
bool matchRegex(std::string模式,std::string inputString){
正则表达式(模式);
返回std::regex_匹配(inputString,expression);
}
模板
T convertVarType(标准::字符串变量){
T returnVal;
如果(变量[0]=='('&&var.back()==')')
returnVal=var;//列表
else if(matchRegex(INT_REGEX,var))
returnVal=std::stoi(var);
else if(matchRegex(DOUBLE_REGEX,var))
returnVal=std::stod(var);
else if(matchRegex(BOOLEAN_REGEX,var))
returnVal=(var=“true”);
其他的
returnVal=var;//字符串或变量
返回值;
}
int main(){
std::string expression=“(定义x(+5 3(*2))”;
std::string firstElement=car(表达式);//从另一个文件生成“define”
auto firstVar=convertVarType(firstElement);
//std::string firstVar=convertVarType(firstElement);//也不起作用
}
看起来您有XY问题,无法根据运行时信息更改模板函数的结果类型。一种可能的解决方案是将std::variant
与可能的类型一起使用。若要滚动您自己的调度机制,请打开运行时值,并在切换案例中创建不同类型的变量。@passer这正是我要做的不,您正试图分配给同一个变量,类型相同。看起来您有XY问题,无法根据运行时信息更改模板函数的结果类型。一种可能的解决方案是将std::variant
与可能的类型一起使用。若要滚动您自己的调度机制,请打开运行时值,并在切换情况下创建不同类型的变量。@passer这正是我要做的不,您正试图分配给相同类型的相同变量。