Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指向重载静态成员的函数指针-在unique_ptr中用作自定义删除程序_C++_C++11_C++17_Function Pointers_Member Function Pointers - Fatal编程技术网

C++ 指向重载静态成员的函数指针-在unique_ptr中用作自定义删除程序

C++ 指向重载静态成员的函数指针-在unique_ptr中用作自定义删除程序,c++,c++11,c++17,function-pointers,member-function-pointers,C++,C++11,C++17,Function Pointers,Member Function Pointers,我有一个带有静态和重载成员函数的类。 我想在unique\u ptr 关于这个话题有很多问题,没有一个对我有用 #include <iostream> #include <memory> #include <functional> class A { public: static void release() { std::cout << "void released\n"; } static vo

我有一个带有静态和重载成员函数的类。 我想在
unique\u ptr
关于这个话题有很多问题,没有一个对我有用

#include <iostream>
#include <memory>
#include <functional>

class A {
    public:
    static void release() {
        std::cout << "void released\n";
    }
    static void release(int*i) {
        std::cout << *i << " released\n";
    }
};

int main()
{
    int i = 10;
    std::unique_ptr<int, decltype(&A::release(int*))> ptr(&i, &A::release); // compiler error
    std::unique_ptr<int, std::function<void(int*)>> ptr(&i, &A::release); // compiler error
    return 0;
}
#包括
#包括
#包括
甲级{
公众:
静态空隙释放(){
标准::cout
不是有效的语法。为了使用
decltype(e)
,您必须编写
decltype(&a::release)
,但这会再次引发歧义错误,因此必须:

decltype(static_cast<void(*)(int*)>(&A::release))
没有帮助解决歧义,因为
std::functions
的构造函数也是一个模板,这意味着编译器再次错过了一个上下文,该上下文将帮助它选择一个重载函数

不是有效的语法。为了使用
decltype(e)
,您必须编写
decltype(&a::release)
,但这会再次引发歧义错误,因此必须:

decltype(static_cast<void(*)(int*)>(&A::release))
没有帮助解决歧义,因为
std::functions
的构造函数也是一个模板,这意味着编译器再次错过了一个上下文,该上下文将帮助它选择一个重载函数

decltype(static_cast<void(*)(int*)>(&A::release))
std::function<void(int*)>