我可以将指向set元素的迭代器转换为LONG_PTR吗?
PS:我不完全明白什么是LONG_PTR?
以下是在运行时弹出错误的示例代码
#include <windows.h>
#include <set>
#include <string>
using namespace std;
void func(LPARAM lp)
{
set<string>::iterator *it = reinterpret_cast<set<string>::iterator*>(lp);
string s = *(*it); //runtime-error
}
int main()
{
char *arr[] = {"0", "1", "2", "3", "4", "5"};
set<string> s(arr, arr+5);
set<string>::iterator it = s.begin()++;
LONG_PTR lp = reinterpret_cast<LONG_PTR>(&*it);
func(lp);
}
答案 0 :(得分:3)
LONGPTR
是__int3264
。
在任何情况下,都不能将迭代器强制转换为此类型,因为迭代器不是指针。但是,您可以获取迭代器指向的元素的地址(使用&*it
),假设存储在容器中的对象类型不会使一元&
重载(如果它确实超载了一元&
,这是一个坏的,糟糕的阶级。)
答案 1 :(得分:0)
可能不会,如果你的意思是std::set
。通常,STL迭代器是比指针复杂得多的对象。
LONG_PTR是一个足以容纳长指针或指针的类型。