c++ - 是否可以在 C++ 中将指向类成员的指针作为单个参数传递?

标签 c++ class pointers function-pointers

这里很好地描述了如何通过指针调用成员函数: http://www.newty.de/fpt/functor.html

但是仿函数需要得到 2 个参数:指向对象的指针和指向成员函数的指针:

TSpecificFunctor(TClass* _pt2Object, void(TClass::*_fpt)(const char*))
{ pt2Object = _pt2Object;  fpt=_fpt; }

调用:

(*pt2Object.*fpt)(string);

是否可以像 C 风格那样传递单个参数:

func() -- call
func -- function pointer

为什么 obj.method 不是完整的指向类成员的指针?

最佳答案

object.*ptmf 语法不会创建中间对象。它没有任何意义,被语言所禁止。您必须立即调用访问指向成员函数的指针的结果。

您可以使用 std::bind 显式创建这样的对象,它将 ptmf 解释为仿函数对象,并使隐式的 this 参数显式化。

auto fn = std::bind( ptmf, object, std::placeholders::_1 );
std::function< void( const char * ) > stdfn = fn;
fn( "foo" ); // equivalent to object.*ptmf( "foo" );

http://ideone.com/ds24F

请注意,此功能是 C++11 中的新功能。尽管 C++03 TR1 有 functionbind,但它们不会在 ptmf 上执行此转换。 (普通 C++03 可以使用 std::mem_fnstd::bind1st 完成这项工作,但它们使用起来非常痛苦并且已被弃用。)

关于c++ - 是否可以在 C++ 中将指向类成员的指针作为单个参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11341028/

相关文章:

c++ - 是否可以在编译时评估数组?

使用 system.io 的 C# 在我的类(class)中不起作用,但在 main 中起作用

java - 匿名类型的类型

python - 无法在 Boost Python 中返回类的实例

c - 当我将指针初始化为NULL时,运行结果很奇怪

c++ - 通过指针调用函数

c++ - 删除 C++ Win32 中的标准窗口框架

c++ - 如何将 STL vector 传递给采用 const [] 的函数 (c++)

c++ - 哈希表中的插入和删除逻辑如何工作?

c - 初始化指向数组的指针