根据其他变量设置变量
set variable depending on other variable
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
,但没有变量名/定义)。默认情况下,您可以绕过此限制,并在构建过程中包含一些额外的步骤,该步骤解析头文件中的这些定义,并以运行时可访问的不同方式存储它们。但是地图是更好的方法,相信我。
相关文章:
- 将双精度变量设置为另一个变量的值
- 将变量设置为类型模板
- 如何为具有整数名称的变量设置位集
- 在 c++ 中将多个变量设置为相同的值
- 我是否必须在类中的所有变量C++设置为 private?
- 在C 中,如何使用变量设置Char Grid2d [x] [y]
- 如果将变量设置为等于新对象,旧对象会发生什么情况?
- C++ 给出编译器错误,将一个(静态)常量全局变量设置为另一个静态常量变量
- 是否可以将类成员变量设置为类函数的结果?
- 将 c++ 代码中的当前用户环境变量设置为对其他进程(如 cmds)可见
- 此CMAKE错误意味着什么?我的变量设置为未发现
- 如何基于用户设置的初始变量设置一组常数值
- 如何使用const成员变量设置数组大小
- 使用变量设置数组长度
- 使用变量设置bitset的大小
- 在C 中,如何将派生类中的私有变量设置为基类的输入值
- C 标量变量设置为零值
- C 定义变量设置值
- 正在将类级别的2D数组变量设置为传入值-C++
- 是否有C++标准类在作用域出口处将变量设置为值