根据其他变量设置变量

set variable depending on other variable

本文关键字:变量 设置 其他      更新时间:2023-10-16
header1.h
#define MaxNum 10
#define MinNum 1
//similar 100 other variables defined 
main.cpp
#include header1.h
main()
{
  int size;
  string first = "MaxNum"; //could be any of the variable name defined in header file 
  size = MaxNum ; 

在头文件中定义了一些变量。在main中,根据"first"的值,我需要设置"size"的值。

我猜你想要

size = MaxNum

if first == "MaxNum" and

size = MinNum

if first == "MinNum"。如果first的可能值集(可供选择的变量集)很小,则可以简单地将赋值放在if, else if系列语句周围。最后,输入else语句来写一条错误消息。

但是,你必须对硬编码:

if (first == "MaxNum") {
    size = MaxNum;
}
else if (first == "MinNum") {
    size = MinNum;
}
//...

因此,决定size赋值的代码随着变量数量的增加而变大。这被认为是糟糕的风格,非常不可维护,而且容易出错。

如果你不想这样做,不要在你的程序中使用多个变量,而是使用一个容器变量包含所有这些可能的键及其值。它被称为关联容器,在c++中有std::map类型实现这样的数据结构。

// Your container for the sizes (or whatever you want to call it)
std::map<std::string, int> sizes; 
sizes["MinNum"] = 1;
sizes["MaxNum"] = 100;
// ... more values ...
// Accessing this container with a variable as the key:
size = sizes[first];

可以看到,使用字符串变量作为键访问这个容器非常容易。sizes[first]只是给出容器中的值,该值的键等于变量first的当前内容的值。

关于c++(和C)源代码的一个非常重要的事实是,在运行时你不能访问变量的名称。所以本质上,它们可以重命名而不会影响您的程序。你想要的(查询变量、枚举、类、函数及其参数的名称等)被称为自省元编程,因为你编写的代码对你的代码("元代码")进行操作。

c++默认不提供元编程工具(我所知道的唯一例外:typeid,但没有变量名/定义)。默认情况下,您可以绕过此限制,并在构建过程中包含一些额外的步骤,该步骤解析头文件中的这些定义,并以运行时可访问的不同方式存储它们。但是地图是更好的方法,相信我。