<分区>
我想在给定 if/else 条件的情况下选择变量的类型。例如:
if (something){
int a = 5;
}
else{
float a = 5;
}
问题是一旦 if/else block 结束,a
将超出范围。而且我无法在全局范围内声明 a
,因为我事先不知道类型。
有办法吗?
标签 c++
<分区>
我想在给定 if/else 条件的情况下选择变量的类型。例如:
if (something){
int a = 5;
}
else{
float a = 5;
}
问题是一旦 if/else block 结束,a
将超出范围。而且我无法在全局范围内声明 a
,因为我事先不知道类型。
有办法吗?
最佳答案
我们仍然不太清楚为什么您需要它,但我能看到的一种解决方案是使用结构、枚举和 union 来模拟动态类型。
你可以有这样的结构
struct value
{
enum
{
INT,
FLOAT
} type;
union
{
int i;
float f;
} value;
};
这就是一些动态类型语言的解释器如何实现他们的类型系统。
对于即将发布的 C++17 标准,您可以使用 std::variant
而不是 union 。对于较旧的编译器,还有 Boost variant .还有 std::any
(当然还有 Boost any )。
另一种可能的解决方案是使用一个足够大的字节数组来容纳最大的类型,并根据需要将数据从数组中复制到正确类型的实际变量中(或从中复制数据)。
另一种可能的解决方案是使用函数重载,并在 if
中使用所需类型的变量调用(重载的)函数,并让该函数执行所需的任何操作。它的一个变体是使用单个模板化函数。
与 this comment我真的只看到一种可能的解决方案:继承和多态性。
有一个抽象的Interface
基类,定义了所需的通用接口(interface)(函数)。然后让 Ethernet
和 WiFi
类继承自这个抽象基类。然后有一个指向基类的指针,您指向 Ethernet
或 WiFi
类的实例。
Ethernet
和WiFi
类的大部分功能应该很常见,甚至可以在基类中实现。对于需要特殊 WiFi
(或 Ethernet
)操作的情况,则 downcast到具体类。
关于c++ - 在 if/else 语句中声明一个可以有不同类型的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44760629/