2013-03-10 67 views
-2

我有使用戶選擇他想使用的數據類型,例如,如果他想使用長或雙等。 我想首先聲明變量的名稱,然後設置其類型。在C++中可能嗎?有沒有什麼辦法來聲明變量的名稱,然後類型

+0

如果我找到了你,那麼在C++世界中是不可能的。 – varnie 2013-03-10 12:53:45

+0

類型是編譯時構造。在程序編譯完成後,它們並不存在,並且在運行時無法更改。 – 2013-03-10 12:56:18

+1

你爲什麼需要這樣做?爲什麼不在用戶做出選擇後創建適當類型的變量?你能澄清嗎? – 2013-03-10 12:56:21

回答

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。

相關問題