gpt4 book ai didi

c++ - 具有包含另一个类的函数指针的映射的类

转载 作者:行者123 更新时间:2023-11-30 01:29:05 24 4
gpt4 key购买 nike

我想做的是有一个包含第二个类的函数指针映射的类,但是第二个类的名称应该无关紧要(不能硬编码到第一个类中)我真的很想成为能够在不使用宏的情况下实现这一点。我遵循了 learncpp.com 上关于函数指针的示例,但是在类之间传递它们时我真的迷路了!我的尝试如下:

#include <map>
class Class1;
typedef double(Class1::*memFunc)();

class Class1
{
private:

std::map<std::string, memFunc> funcMap;

public:

void addFunc(std::string funcName, memFunc function)
{
funcMap.insert(std::pair<std::string, memFunc>(funcName, function));
}

};

class MyClass
{
public:

MyClass()
{
//How do I add member function getValue() to Class1?
class1.addFunc("new function", getValue());
}

double getValue()
{
return 0;
}

private:

Class1 class1;
};

最佳答案

类的名称是函数指针类型的一部分,它成为映射类型的一部分,成为 MyClass 的一部分。根据“不能硬编码”的要求有多强,也许模板就足够了?

#include <string>
#include <map>
template<typename T>
class Class1
{
typedef double(T::*memFunc)();
std::map<std::string, memFunc> funcMap;
public:
void addFunc(std::string funcName, memFunc function)
{
funcMap.insert(std::pair<std::string, memFunc>(funcName, function));
}
};

class MyClass
{
public:
MyClass()
{
class1.addFunc("new function", &MyClass::getValue);
}
double getValue()
{
return 0;
}
private:
Class1<MyClass> class1;
};
int main()
{
MyClass mc;
}

关于c++ - 具有包含另一个类的函数指针的映射的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6414290/

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