我有使用户选择他想使用的数据类型,例如,如果他想使用长或双等。 我想首先声明变量的名称,然后设置其类型。在C++中可能吗?有没有什么办法来声明变量的名称,然后类型
-2
A
回答
2
如果我明白你的问题正确,要做到这一点:
declare variable;
// in the program:
variable = (int) anotherVariable;
简短的回答:
没有
龙答:
一个void *
正是这样做的,它需要在解引用前显式转换为不同的类型。但是这对于不是void *
s的变量是不可能的。
void *variable = NULL;
int someIntVariable = 100;
int *someIntPointer = NULL;
variable = &someIntVariable;
someIntPointer = (int *)variable;
.. // but this seems unncessary.
0
考虑使用VARIANT
(如果你在Windows上)或其他平台上类似的东西。 VARIANT
的要点在于它是一个能够存储各种数据类型的联合,但在给定时间只能存储一种特定类型的数据。这样,您可以提前定义一个新的通用变量类型(VARIANT
),然后根据用户的选择在运行时调整其内部类型。但是,使用诸如VARIANT
之类的东西的代价是,因为您在其上执行的每个操作都必须检查操作对于当前基础类型是否正确。 VARIANT
也使用更多的内存,因为联合有其自己的开销(详见定义)。
您可能希望在类中包装变体操作以简化其使用。关于VARIANT
而不是void*
的好处在于,它为您提供了更多的类型安全性,并且代码变得更加可读。
编辑:作为另一个答案指出,boos::variant
是为此目的。
0
看一看boost::variant
,或者,如果您只需要POD,union
。但请记住,这使许多事情变得复杂。
0
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;
}
...或使用一些准备好的变体implmementation。
相关问题
- 1. 的Rails 3.2 - 什么是模型(型号::变量)声明的变量的名称,有没有更好的做法?
- 2. 有没有什么办法来测量android中的噪声
- 3. 有没有办法获得特征的类型名称?
- 4. VB没有声明变量
- 5. LESS使用类名称声明变量?
- 6. 有没有办法更改变量赋值名称
- 7. 有没有办法为css claas名称分配变量?
- 8. 有没有办法定义在方法声明中两个泛型类型
- 9. 为什么Reads没有声明协变?
- 10. “随后的变量声明必须具有相同的类型”
- 11. 有没有什么办法让在声明的顺序从一个Java类中的私有字段名
- 12. 有没有办法改变一个局部类型的常量* *它在外部声明的例程?
- 13. 有没有什么办法来检查类的属性在C#
- 14. 获取包中声明的所有变量和常量名称
- 15. 没有在名称空间外声明的类体的C++类
- 16. 为什么编译器说我没有声明我的变量?
- 17. 有没有什么办法来嗅探Windows中的命名管道流量?
- 18. 上实现的方法类型声明它没有类型声明
- 19. 有没有办法在IntelliJ的类声明中使泛型自动完成?
- 20. 有没有什么办法来实例化一个匿名的内部类?
- 21. 有没有什么办法用Class变量创建一个泛型的实例?
- 22. 有没有办法在Firebird中引用带有变量的字段名称
- 23. 有没有办法在类中获得某种类型的所有变量?
- 24. 有什么办法让用户在SQL脚本之上声明变量吗?
- 25. Java - 有没有办法使用变量作为名称的一部分来调用变量?
- 26. 有什么办法在索引器声明中使用类型参数吗?
- 27. 为什么没有在头文件中声明该变量?
- 28. 有没有办法在变量中声明一个Groovy字符串格式?
- 29. 有没有办法将变量类型绑定到列数据类型?
- 30. 为什么变量名称应该被声明为“错误?
如果我找到了你,那么在C++世界中是不可能的。 – varnie 2013-03-10 12:53:45
类型是编译时构造。在程序编译完成后,它们并不存在,并且在运行时无法更改。 – 2013-03-10 12:56:18
你为什么需要这样做?为什么不在用户做出选择后创建适当类型的变量?你能澄清吗? – 2013-03-10 12:56:21