我有一個映射將存儲一個字符串和一個相應的地址(內存),其中包含一個整數值或字符值。什麼數據類型是一個地址?
map<string,address> myMap; //What datatype would address be?
我不知道我會放什麼數據類型這裏的任何幫助將是巨大
我有一個映射將存儲一個字符串和一個相應的地址(內存),其中包含一個整數值或字符值。什麼數據類型是一個地址?
map<string,address> myMap; //What datatype would address be?
我不知道我會放什麼數據類型這裏的任何幫助將是巨大
您可以考慮創建一個自定義類地址將包含指針和數據類型。那樣
地圖<字符串,地址> myMap;
仍然有效。
我忘了提及:指針將是'void *'類型,數據類型信息可以存儲爲標誌,它會告訴你它是int還是焦炭。 –
這可能是我必須要做的謝謝! – conterio
「地址」記者在C或C++的指針。
試試這個指針是指向整數或整數的數組:
map<string, int*> myMap;
而這對於一個指向char或字符數組:
map<string, char*> myMap2;
的數據類型存儲器地址是指針,用它指向的類型表示,後跟星號(*
)。例如,如果你的存儲的int
地址,你的聲明是這樣的:
map<string, int*> myMap;
如果你有麻煩google搜索這個問題,嘗試搜索「指針」,而不是「地址」。
的地址被存儲在被稱爲指針類型一個化合物類型。
爲了獲得指針類型指向您使用「*」符號的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
所以基本上你想要映射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) { }
};
這裏是地道的類型,你正在尋找:
std::map<std::string, boost::variant<int*, char*>>
什麼樣的地址的?一個內存地址?街道地址? – chris
內存地址@chris – conterio
你會如何判斷它是整數地址還是char? –