取消引用非静态成员函数C++

dereference non-static member functions C++

本文关键字:函数 C++ 静态成员 引用 取消      更新时间:2023-10-16

为什么这个语句是错误的?

(*std::cout.operator<<) (std::endl);

我只是通过后期绑定调用std::endl。。。

成员函数始终是成员,而不是对象成员。最接近你想要做的事情是:

std::ostream & (std::ostream::* fp)(std::ostream &(*)(std::ostream&))
    = &std::ostream::operator<<;
(std::cout.*fp)(std::endl);

也就是说,您形成一个指向类成员函数fp指针,然后在std::cout对象上调用相应的成员函数。

我认为最接近的近似值实际上是

auto lambda = [](auto x){std::cout << x;};
lambda(std::endl);

或作为单一语句

[](auto x){std::cout << x;}(std::endl);

您的编译器可能还不支持此功能。