所以,让我们说,在C ++的一个类中,我有各种各样的成员变量。结构,字符串,整数等等可能是任何东西。这些变量可以通过初始化该类的对象来设置,也可以不设置。给定int a,float b,char c,有时可以设置所有这些或者都不设置它们。设置它们后,可以将它们设置为变量的任何可能值。我想找到一些设置,并确定是否设置了变量:
1)大量的铸造。我总是可以创建一个具有布尔值的Data_Value装饰器类,并将其模板化为给定变量。这需要调用a_data_value.value和a_data_value.isInitialized。
2)许多额外的布尔变量。我宁愿没有bool a_initialized,bool b_initialized。
我真正想做的是这样的事情:
Python add to a function dynamically
在C ++中,包含任何和所有变量,包括基元。我知道很高的顺序,我完全期待悲观的答案。
答案 0 :(得分:2)
答案 1 :(得分:1)
我会使用可以为空的模板。见http://www.codeproject.com/KB/mcpp/CNullable.aspx
答案 2 :(得分:0)
假设你有
class Bob {
int a;
int b;
double c;
complex<double> d;
Bob () : a(), b(), c(), d() {}
};
当您创建新Bob时,所有内容都将设置为默认值(在这种情况下为零)。
原始类型没有设置或未设置状态。他们总是有一些价值。
答案 3 :(得分:0)
如果你想用C ++重写Python,你可以。
您需要一个由字符串键控的高效unordered_map
类。该字符串将是变量名。
每个变量值都是一个类(称为VARIANT,heh),它可以保存任何原始值。
然后,您将“struct”作为unordered_map
又名dictionary
的实例,而不是C ++结构。
如果在字典中找到变量名,则表示已设置,您可以返回该值。如果没有找到,则从未设置过。
如果您计划在C ++中按名称引用字典键,则需要使用以下内容来提高效率:
而不是:
VARIANT v = dict["name"];
使用:
static const std::string name_key("name");
VARIANT v = dict[name_key];
这样,每次进入函数时,不是为每次键查找构建一个包含“name”的std :: string,而是一次完成。