问题描述
我正在将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 (将#修改为@)