我有一个存储字符串的映射,以及包含整数值或char值的相应地址(内存)。
map<string,address> myMap; //What datatype would address be?
我不确定我会在这里放什么数据类型任何帮助都会很棒
答案 0 :(得分:3)
所以基本上你想要在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));
这只是为了给你一个想法,不清楚你的数据部分是否已经存储在程序本身中(所以你真的有一个int*
或char*
)或者如果你只需要一个数字地址,然后在汇编程序中重新定位。
您可以丰富行为,使用enum class
或RTTI来区分类型等。
一个非常简单的解决方案就是拥有像
这样的东西union Address
{
char* addressChar;
int* addressInt;
Address(int* addressInt) : addressInt(addressInt) { }
Address(char* addressChar): addressChar(addressChar) { }
};
答案 1 :(得分:2)
C或C ++中指针的“地址”对应。
尝试使用指向整数或整数数组的指针:
map<string, int*> myMap;
这是指向char或char数组的指针:
map<string, char*> myMap2;
答案 2 :(得分:2)
内存地址的数据类型是指针,它由它指向的类型表示,后跟星号(*
)。例如,如果您存储int
的地址,您的声明将如下所示:
map<string, int*> myMap;
如果您在使用Google搜索时遇到问题,请尝试搜索“指针”,而不是“地址”。
答案 3 :(得分:2)
地址存储在复合类型中,称为指针类型。
为了获得指向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
答案 4 :(得分:2)
您可以考虑创建一个包含指针和数据类型的自定义类地址。就这样了
映射&LT;串,地址&gt; MYMAP;
仍然有效。
答案 5 :(得分:0)
以下是您正在寻找的惯用类型:
std::map<std::string, boost::variant<int*, char*>>