Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从非编译时常量设置的局部变量确定模板类型? 我将TCPSPRILE从方案变成C++,部分是将字符串类型从“Car”(一个C++中实现的方案函数)转换为它的实际类型——我通过ReGEX演绎这个。我的问题是,我的函数必须根据输入字符串的性质返回不同的类型。我试_C++_Templates_Generics_Types_Generic Programming - Fatal编程技术网

从非编译时常量设置的局部变量确定模板类型? 我将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这正是我要做的不,您正试图分配给相同类型的相同变量。