我想在给定if / else条件的情况下选择变量的类型。例如:
if (something){
int a = 5;
}
else{
float a = 5;
}
问题是,一旦if / else块完成,a
将超出范围。我无法在全球范围内宣布a
,因为我事先并不知道这种类型。
有办法吗?
答案 0 :(得分:3)
我们仍然不知道为什么你想要它,但我能看到的一个解决方案是使用结构,枚举和联合来模拟动态类型。
您可以拥有类似
的结构struct value
{
enum
{
INT,
FLOAT
} type;
union
{
int i;
float f;
} value;
};
这是一些动态类型语言的解释器实现其类型系统的方式。
使用即将推出的C ++ 17标准,您可以使用std::variant
代替联合。对于较旧的编译器,还有Boost variant。还有std::any
(当然还有Boost any)。
另一种可能的解决方案是使用足够大的字节数组来保存最大类型,并根据需要将数据从数组复制到数组中或从数组复制到正确类型的实际变量中。
另一个可能的解决方案是使用函数重载,并在if
中使用所需类型的变量调用(重载)函数,并让函数执行所需的任何操作。其中一个变体是使用单个模板化函数。
使用this comment我真的只看到一种可能的解决方案:继承和多态。
有一个抽象的Interface
基类,定义了所需的通用接口(函数)。然后从此抽象基类继承Ethernet
和WiFi
类。然后有一个指向基类的指针,指向Ethernet
或WiFi
类的实例。
Ethernet
和WiFi
类的大多数功能应该非常常见,甚至可以在基类中实现。对于需要特殊WiFi
(或Ethernet
)操作的情况,然后downcast到具体类。
答案 1 :(得分:0)
您无法在运行时更改/选择真正的变量类型。 C ++是强类型的。所以你可以选择: