如何解决从由非编译时常量设置的局部变量确定模板类型?
我正在将Scheme从Transpiler转换为C ++,其中一部分是将字符串类型从“ car”(我在C ++中实现的Scheme函数)转换为实际类型-我通过Regex推论得出。我的问题是我的函数必须根据输入字符串的性质返回不同的类型。我试图通过用函数的模板名称定义返回值来解决此问题,但是由于它的最终值不是编译时间常数,因此如何使之成为可能?
// determine_type.cpp
#include <regex>
#include "example_3.cpp"
std::string INT_REGEX = "^[-+]?\\d+$",DOUBLE_REGEX = "^[-+]?\\d+\\.\\d?$",BOOLEAN_REGEX = "^(true|false)$";
bool matchRegex(std::string pattern,std::string inputString) {
std::regex expression(pattern);
return std::regex_match(inputString,expression);
}
template <typename T>
T convertVarType(std::string var) {
T returnVal;
if (var[0] == '(' && var.back() == ')')
returnVal = var; // list
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");
else
returnVal = var; // string or variable
return returnVal;
}
int main() {
std::string expression = "(define x (+ 5 3 (* 2 2)))";
std::string firstElement = car(expression); // yields "define",from another file
auto firstVar = convertVarType(firstElement);
// std::string firstVar = convertVarType(firstElement); // doesn't work either
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。