gpt4 book ai didi

c++ - 将特定类的成员函数存储在 vector 中的语法是什么?

转载 作者:行者123 更新时间:2023-11-27 23:16:46 26 4
gpt4 key购买 nike

我做了很多搜索,但是 * () 和类作用域的组合极大地阻碍了我对语法的理解,每次编辑都会抛出一个新错误,有帮助吗?

我正在尝试做的事情:

声明一个 std::vector 指针指向 MyClass.h 中的成员函数

在 MyClass.cpp 的构造函数中将实际成员函数分配给 std::vector

成员函数不是静态的

谢谢!

最佳答案

我很好奇你打算从哪里使用它们。你看,为了调用 C++ 类成员函数,你需要有一个实例指针来调用它(每个成员函数都需要一个 this 来访问类状态)。所以通常你会用 std::bind 将成员函数指针和实例指针包装在一起,然后可能将结果存储在 std::function 中。要将它们放入 vector 中,它们都需要相同的签名。

这就是您要找的东西吗:

class P
{
typedef std::function<void (void)> func_t;
std::vector<func_t> functions;
public:
P()
{
functions.push_back(std::bind(&P::foo1, this));
functions.push_back(std::bind(&P::foo2, this));
functions.push_back(std::bind(&P::foo3, this));
}
void foo1(void)
{
std::cout << "foo1\n";
}
void foo2(void)
{
std::cout << "foo2\n";
}
void foo3(void)
{
std::cout << "foo3\n";
}
void call()
{
for(auto it = functions.begin(); it != functions.end(); ++it)
{
(*it)();
}
}
};

int main()
{
P p;
p.call();
}

在 OP 进一步澄清后,我将提出以下建议:

class P
{
typedef std::function<void (void)> func_t;
std::map<const char*, func_t> functions;
public:
P()
{
functions["foo1"] = std::bind(&P::foo1, this);
functions["foo2"] = std::bind(&P::foo2, this);
functions["foo3"] = std::bind(&P::foo3, this);
}
void foo1(void)
{
std::cout << "foo1\n";
}
void foo2(void)
{
std::cout << "foo2\n";
}
void foo3(void)
{
std::cout << "foo3\n";
}
void call_by_name(const char* func_name)
{
functions[func_name]();
}
};

int main()
{
P p;
p.call_by_name("foo1");
p.call_by_name("foo2");
p.call_by_name("foo3");
}

关于c++ - 将特定类的成员函数存储在 vector 中的语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15867800/

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