gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:46:26 25 4
gpt4 key购买 nike

这里很好地描述了如何通过指针调用成员函数: 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com