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

时间:2014-08-31 10:32:46

标签: c++ binding

为什么这句话错了?

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

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

2 个答案:

答案 0 :(得分:3)

成员函数始终是成员,而不是对象成员。与你尝试做的最接近的是:

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

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

答案 1 :(得分:0)

我说最接近的实际值是

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

或作为单一陈述

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

你的编译器可能还不支持这个。