gpt4 book ai didi

c++ - 如何调用返回类方法指针的类方法?

转载 作者:太空狗 更新时间:2023-10-29 21:33:48 25 4
gpt4 key购买 nike

这编译正常,但给我一个链接器错误“对 A::a(std::string const&) 的 undefined reference ”

如何正确调用 A::a(const std::string& name) 以及如何在 doSomething() 方法中正确调用 funcTable.second()?

.h文件:

class A {
void (A::*a(const std::string& name))() const;
void func1() const;
void func2() const;
void doSomething();
};

.cpp 文件:

void (A::*a(const std::string& name))() const {
const std::map<const std::string, void (A::*)() const> funcMap = {
{"name1", &A::func1},
{"name2", &A::func2}
};
return funcMap.at(name);
}
void A::func1() const {
// call func1
}
void A::func2() const {
// call func2
}
void A::doSomething() {
std::pair<std::string, void (A::*)() const> funcTable;
funcTable.first = "func1";
funcTable.second = a("name1"); // This is my problem
// Not even sure how to then call funcTable.second()
}

我意识到 typedef 会使它更清晰。我试过这种方法,但我也不确定该怎么做。

最佳答案

void (A::*a(const std::string& name))() const {

这不是定义你的类方法。这是在全局命名空间中定义一个独立函数,它返回一个类方法指针。你想要的是:

void (A::*A::a(const std::string& name))() const {

这定义了一个返回类成员指针的类方法。满口的。

I realize a typedef would make this a lot cleaner.

是的,会的。非常鼓励使用 typedef。使保持更多的剩余理智成为可能。这总是一件好事。

附言- 如果您实际上尝试编译您在问题中显示的确切代码,它不会“编译正常”,尽管您另有声明。您会收到以下编译错误,它提供了关于正在发生的事情的重要线索:

t.C: In function ‘void (A::* a(const string&))() const’:
t.C:13:23: error: ‘void A::func1() const’ is private within this context
{"name1", &A::func1},

嗯?为什么一个类方法不能引用另一个私有(private)类方法?哦!

关于c++ - 如何调用返回类方法指针的类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49951289/

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