gpt4 book ai didi

c++ - 如何将非静态成员函数作为 unique_ptr 删除器传递

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:35 25 4
gpt4 key购买 nike

<分区>

#include <memory>
#include <iostream>
#include <exception>
#include <curl/curl.h>

class client
{
private:
std::unique_ptr<CURL, decltype(&psclient::del_curl)> uptr_curl_;

inline CURL * init_curl()
{
CURLcode result = curl_global_init(CURL_GLOBAL_DEFAULT);
if(result != CURLE_OK)
throw std::logic_error(curl_easy_strerror(result));
return curl_easy_init();
}

inline void del_curl(CURL * ptr_curl)
{
curl_easy_cleanup(ptr_curl);
curl_global_cleanup();
}
public:
inline client()
: uptr_curl_(init_curl(), &client::del_curl)
{
}
}

编译器一直报错No matching constructor for initialization of 'std::unique_ptr<CURL, void (*)(CURL *)>'

在我看来,删除模板参数的声明是正确的。它是一个返回 void 并以 CURL * 作为参数的函数指针。这与 del_curl 的签名匹配.

在 C++ 中是否还有另一个我不知道的随机规则指定了对非静态成员函数指针的模板参数的要求?如果是,为什么?

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