2015-10-03 29 views
2

我有一個映射將存儲一個字符串和一個相應的地址(內存),其中包含一個整數值或字符值。什麼數據類型是一個地址?

map<string,address> myMap; //What datatype would address be? 

我不知道我會放什麼數據類型這裏的任何幫助將是巨大

+1

什麼樣的地址的?一個內存地址?街道地址? – chris

+0

內存地址@chris – conterio

+0

你會如何判斷它是整數地址還是char? –

回答

2

您可以考慮創建一個自定義類地址將包含指針和數據類型。那樣
地圖<字符串,地址> myMap;
仍然有效。

+0

我忘了提及:指針將是'void *'類型,數據類型信息可以存儲爲標誌,它會告訴你它是int還是焦炭。 –

+0

這可能是我必須要做的謝謝! – conterio

1

「地址」記者在C或C++的指針。

試試這個指針是指向整數或整數的數組:

map<string, int*> myMap; 

而這對於一個指向char或字符數組:

map<string, char*> myMap2; 
1

的數據類型存儲器地址是指針,用它指向的類型表示,後跟星號(*)。例如,如果你的存儲的int地址,你的聲明是這樣的:

map<string, int*> myMap; 

如果你有麻煩google搜索這個問題,嘗試搜索「指針」,而不是「地址」。

1

地址被存儲在被稱爲指針類型一個化合物類型

爲了獲得指針類型指向您使用「*」符號的int

int i; // integer 
int* ip; // pointer to integer (stores the address of an int) 

map<string, int*> myMap; // pointer type pointing to an int 
2

所以基本上你想要映射unordered_map內的類型通用地址。然後,只需定義自己的數據類型,它能夠安全地管理它,是這樣的:

class Address 
{ 
public: 
    virtual uintptr_t getAddress() = 0; 
    virtual ~Address() { } 
}; 

template<typename T> 
class RealAddress : public Address 
{ 
private: 
    T* address; 
public: 
    RealAddress(T* address) : address(address) { } 
    uintptr_t getAddress() override { return address; } 

} 

std::unordered_map<std::string, std::unique_ptr<RealAddress>> labels; 
labels["foo"] = std::unique_ptr<Address>(new RealAddress<int>(address)); 

這僅僅是給你的想法,但目前還不清楚,如果你有的assebly存儲在節目本身的數據部分(所以你真的有一個int*或一個char*),或者如果你只需要一個數字地址,然後重新定位在你的彙編程序。

您可以豐富行爲,使用enum class或RTTI來區分類型等。

一個非常簡單的解決辦法是有一些像

union Address 
{ 
    char* addressChar; 
    int* addressInt; 
    Address(int* addressInt) : addressInt(addressInt) { } 
    Address(char* addressChar): addressChar(addressChar) { } 
}; 
0

這裏是地道的類型,你正在尋找:

std::map<std::string, boost::variant<int*, char*>>