从由非编译时常量设置的局部变量确定模板类型?

问题描述

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