gpt4 book ai didi

c++ - 如何给一个成员函数作为参数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:24 24 4
gpt4 key购买 nike

我正在为 C++ 模板、函数和绑定(bind)而苦苦挣扎。

假设我的类 A 是这样的:

class A {
void set_enabled_for_item(int item_index, bool enabled);

void set_name_for_item(int item_index, std::string name);

int item_count();
}

我想在 A 中创建一个这样的方法:

    template <typename T>
void set_for_all_items(T value, ??? func) {
auto count = trackCount();
for (auto i = 0; i < count; ++i) {
func(i, value);
}
}

所以我可以用参数 A 的成员函数来调用它,就像这样(或类似这样的东西):

auto a = new A;
a->set_for_all_items("Foo Bar", &A::set_name_for_item);

三个 ??? 将是第二个参数的类型。由于我对 std::function、std::bind 和模板还很陌生,所以我尝试了我已经知道的使用方法,但我总是遇到编译错误。

那么怎么做呢?

最佳答案

标准成员函数的语法是Ret (Class::*) (Args...)。在您的情况下,这可能看起来像这样(未经测试):

template <typename T, typename Arg>
void set_for_all_items(T value, void (A::* func) (int, Arg)) {
auto count = trackCount();
for (auto i = 0; i < count; ++i) {
(this->*func)(i, value); //note the bizarre calling syntax
}
}

这将允许您使用您想要的语法调用:

auto a = new A;
a->set_for_all_items("Foo Bar", &A::set_name_for_item);

如果你想使用 std::function,你需要使用 lambda 或 std::bind 或类似代码。

关于c++ - 如何给一个成员函数作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31409764/

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