有没有办法先声明变量名,然后再声明类型?
Is there any way to declare the name of the variable then the type
我已经允许用户选择他想使用的数据类型,例如,如果他想使用长或双等。我想先声明变量的名称,然后设置它的类型。在c++中可能吗?
如果我对你的问题理解正确,你想这样做:
declare variable;
// in the program:
variable = (int) anotherVariable;
简短的回答:<标题>没有
长答:
a void *
正是这样做的,在解引用之前需要显式地将其转换为不同的类型。但对于非void *
s的变量,这是不可能的。
void *variable = NULL;
int someIntVariable = 100;
int *someIntPointer = NULL;
variable = &someIntVariable;
someIntPointer = (int *)variable;
.. // but this seems unncessary.
标题>看看boost::variant
,或者,如果你只需要pod, union
。但是要记住,这会使许多事情复杂化。
enum VariantType {
USER_INT, USER_DOUBLE
};
union Variant {
int i;
double d;
}
int main() {
VariantType type;
Variant data;
type = getUserDataType();
switch(type) {
case USER_INT:
data.i = 42;
break;
case USER_DOUBLE:
data.d = 42.0;
break;
default:
break;
}
…或者使用一些现成的变体实现。
考虑在其他平台上使用VARIANT
(如果你在Windows上)或类似的东西。VARIANT
的要点在于,它是一个能够存储所有类型数据的联合,但在给定时间只能存储一种特定类型。通过这种方式,您可以提前定义一个新的泛型变量类型(VARIANT
),然后在运行时根据用户的选择调整其内部类型。
使用像VARIANT
这样的东西是有代价的,因为你对它做的每一个操作都必须检查操作是否对当前底层类型是正确的。VARIANT
还使用更多的内存,因为联合有自己的开销(详细信息请参见定义)。
您可能希望在类中包装各种操作以简化其使用。与void*
相比,VARIANT
的好处是它提供了更多的类型安全,代码变得更可读。
编辑:正如另一个答案指出的,boos::variant
是为了这个目的。
相关文章:
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- '{'标记之前的预期类名,然后在预声明时无效使用不完整的类型'class class_name'
- 是否可以将前向声明和常规声明合并到一个文件中,然后像分开一样使用它?
- 将变量声明为全局变量,然后声明为局部变量 -Shadowing-
- 为什么我不能定义一元运算符,然后在 MSVC 的模板类中声明具有相同名称的友元二进制运算符?
- 如何声明一个数组,然后在另一行中赋值
- 如何在命名空间中声明外部全局,然后定义它?
- 如何将对象定义为一种类型,然后再将其声明为子类型
- 如何声明一个未知大小的数组,然后输入直到我想要,然后获取数组的大小
- 如何声明数组,然后稍后分配
- 有没有办法声明一个类,然后在 c++ 的函数中初始化它
- 在两个不同的头中声明相同的名称空间,然后将它们包含在一个cpp中
- 如何在 if. 中使用变量.然后..C++中的声明
- 声明函数,然后在 C/C++ 中内联定义它
- 声明一个表,然后填充一个表
- 将函数放在类中,然后声明"New"是否使其线程安全?
- 在堆上声明对象,然后通过引用传递它
- C++ typedef a std::p air,然后使用 typedef 声明映射
- 在函数外部声明对象,将其作为引用传递,然后在函数内部创建它
- 为什么一旦我将引用声明为 const 然后它可以采用不同类型的数据?