有幾種方法可以做到這一點。 A union可讓您在同一內存位置存儲多種不同類型的數據,但使用的空間將是最大數據類型所需的空間,並且在添加或刪除它時必須知道該類型:
// This will take 8 bytes because a long is int64_t is 8 bytes
union MyUnion {
int32_t regular_int;
int64_t big_int;
}
MyUnion var;
// Stores an int32_t in var
var.regular_int = 100;
// replaces it wiht an int64_t
var.big_int = 100;
Boost variant圍繞變體的想法提供了一個很好的面向對象的包裝,並允許包含非POD類型。
您也可以創建自己的一組類,使您可以執行此操作並提供對您的應用程序有用的功能。例如,如果你需要能夠寫所有的值類型到標準輸出下面可能是有用的:
class MyVariant {
public:
virtual void print() = 0;
}
template<class T> MyVariantType public MyVariant {
private:
private T data_;
public:
MyVariantType(T data) {
data_ = data;
}
virtual void print() {
cout << data_;
}
}
MyVariant* var = new MyVariantType<int>(100);
var->print();
var = new MyVariantType<string>("hello world");
var->print();
最後,如果你真的絕望了,你可以用void *指針和做鑄造,但這不推薦。
你可以使用工會(但你需要跟蹤你存儲的是什麼類型) –
工會或void *,但強烈依賴於你需要做什麼。 – user2553780
爲什麼沒有模板?你究竟在做什麼? – OmnipotentEntity