gpt4 book ai didi

c++ - 获取指向列表中对象的永久指针

转载 作者:太空狗 更新时间:2023-10-29 21:41:50 25 4
gpt4 key购买 nike

我目前正在寻找一种在列表中拥有指向对象的永久指针的方法。我所说的永久性指的是一个指针,只要它存在,它就始终指向同一个对象。

我找不到任何简单的方法来做到这一点,所以有人有想法吗?我已经在使用 boost,所以 boost 解决方案也是可以接受的。

为了更清楚地说明我需要什么,这里有一个例子:

std::map<int, std::list<void (*)()> > handlerList; // I store some callback functions like this

void addHandler( int id, void (*handlerFunc)() ) {
handlerList[id].push_back(handlerFunc); // 100% intended behavior (I know that the []-operator creates a object if it doesn't exist)
}

我想要的是这样的:

some_permanent_pointer_type addHandler( int id, void (*handlerFunc)() ) {
return handlerList[id].push_back(handlerFunc);
}

然后在其他时间点:

some_permanent_pointer_type handlerPointer;

handlerPointer = addHandler( 123, someFunc );

// Other point of code

handlerPointer.delete(); // or
ListType.delete(handlerPointer); // Or something like this

有人知道吗?编写我自己的类(class)没什么大不了的。但我不知道如何实现这一点。但我更喜欢已经存在的东西。时间和东西。

注意:此代码将在 linux 机器上运行。

最佳答案

这是我快速拼凑的一些东西。目前,调用 destroy() 两次是错误的,但这是可以修复的。

#include <map>
#include <list>

std::map<int, std::list<void (*)()> > handlerList;

class HandleHandle {
public:
HandleHandle(std::list<void (*)()> &list, std::list<void (*)()>::iterator iterator):
list_(list),
iterator_(iterator)
{}

void destroy() {
list_.erase(iterator_);
}

private:
std::list<void (*)()> & list_;
std::list<void (*)()>::iterator iterator_;
};

HandleHandle addHandler(int id, void (*handlerFunc)()) {
handlerList[id].push_back(handlerFunc);
return HandleHandle(handlerList[id], handlerList[id].rbegin().base());
}

void someFunc() {
}

int main() {
auto handlerPointer = addHandler(123, someFunc);
handlerPointer.destroy();
}

关于c++ - 获取指向列表中对象的永久指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27908160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com