gpt4 book ai didi

C++::Template 函数 - 从 object.function 获取对象的地址

转载 作者:行者123 更新时间:2023-11-30 03:43:58 25 4
gpt4 key购买 nike

我想避免有两个参数。所以我们有:

class A;
void A::boo();

我要转这段代码:

template <class C>
void foo(C &c, void (C::*func)())
{
(c.*func)();
}

A a;
foo(a, &a.boo);

对此:

template <class C, C &c>      // Something similar
void foo(void (C::*func)())
{
(c.*func)();
}

A a;
foo(&a.boo); // Since I'm using the reference of the object instance

我相信我理解 C++ 中的模板是简单的字符串替换,但我观察到它们的实现稍微更高级和更灵活。我也相信我掌握了类及其成员函数的概念;函数和类实例在内存中的一个地址就像函数的参数,以便访问该类实例在内存中的成员。

那么,解决这个问题,有没有办法做我想做的事情?

编辑:

我的错,错过了 & 标志。更正:&a.boo

最佳答案

最简单的方法是接受一个仿函数,它将绑定(bind)实例到调用:

template <class F>
void foo(F f)
{
f();
}

A a;
foo( [&a](){ a.boo(); } );

或者,没有 lambda:

A a;
foo(std::bind(&A::boo, &a));

关于C++::Template 函数 - 从 object.function 获取对象的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35792078/

25 4 0