gpt4 book ai didi

c - 如何使用 extern 从 C 调用带有签名 std::list 的 C++ 方法?

转载 作者:行者123 更新时间:2023-12-02 06:55:07 26 4
gpt4 key购买 nike

我有一个 C++ 方法,它将 std::list 作为函数参数;它会在调用时填充该列表。

我想使用 extern 从 C 调用此方法。

如何在从 C 调用时匹配函数参数?

伪代码如下:

void getlist(std::list<Object *object> list)
{
list.push_back("A");
}

extern "C"
{
void list()
{
getlist(/*?*/);
}
}

那么,我该如何调用带有必需参数的getlist方法呢?

最佳答案

不幸的是,您将不得不依赖 void* 来使用 C 来传达您的界面。

extern "C" void getlist(void *list_) {
std::list<Object*> *list = static_cast<std::list<Object*>*>(list_);
list->push_back("A");
}

例如,您必须创建您的列表:

extern "C" void* create_list(void) {
return new std::list<Object*>;
}

您必须在您的列表中附加:

extern "C" void list_append(void *list_, void *obj_) {
std::list<Object*> *list = static_cast<std::list<Object*>*>(list_);
list->push_back(static_cast<Object*>(obj_));
}

最终您将不得不销毁您的列表以避免内存泄漏,因为:

extern "C" void delete_list(void *list_) {
delete static_cast<std::list<Object*>*>(list_);
}

关于c - 如何使用 extern 从 C 调用带有签名 std::list 的 C++ 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33207655/

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