动态生成(可执行)代码

时间:2016-04-12 00:17:41

标签: c++ global-variables extern local-variables

我有一个接受两个字符串的函数

#include <iostream>
#include <vector>
#include <limits>
#include <sstream>
#include <fstream>

int main() {
    std::ifstream f ("input_file");
    if (f.is_open()) {
        std::vector<void*> v;
        unsigned long long int num;
        while(f >> num) {
            if (num > std::numeric_limits<unsigned short>::max()) {
                v.push_back(new unsigned long long int(num));
            }
            else {
                v.push_back(new unsigned short(num));
            }
        }
        for (auto i: v) {
            delete i;
        }
    f.close();
    }
}

但我必须定义一个名为varname的String,以便进行编译。问题是,这样做意味着只修改本地varname来保存varValue;

如何更改extern的名称并动态分配值?

这是arduino代码的完整内容摘要 主要草图

case 'm':
    temp = (children >= 4)? 1:2;
    break;
case 'f':
    temp = (children >= 4)? 4:3;
    break;
default:
    temp = 4;
    break;  

在串行监视器上写入某些内容时,将调用setStringValue函数。在写入逗号分隔的名称值(名称,值)后,我将其传递给该函数。参数名称是我在草图中指定给全局字符串的名称及其在逗号后面的值。

然后我想创建一个extern String,调用第一个参数的值,并为其赋值第二个参数。

目前,当我传递testString时,&#34;更改了&#34;在串行监视器上,它打印一个空格。

1 个答案:

答案 0 :(得分:0)

在我看来,这是想要通过修改变量在运行时调用函数的变体。例如

int whichFunction = 42;
foo + whichFunction ();   // call foo42;

你做不到。

你似乎想要:

String foo;
setStringValue ("foo", "bar");  // set variable foo to bar

你也做不到。在任何情况下,可执行代码都不知道变量或函数名称,因此您不能在运行时使用这样的变量名称。

你可以在一定程度上解决这个问题。例如,您的函数setStringValue可能如下所示:

void setStringValue(String varname,String varValue){
  if (varname == "foo")
    foo = varValue;
  else if (varname == "bar")
    bar = varValue;     
}

或者,您可以拥有一个将名称映射到地址的表。然后扫描表格,找到匹配的名称,并设置相应的变量。