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*)>