【发布时间】:2020-09-29 12:56:52
【问题描述】:
有可能做这样的事情吗?:
// some_header.hpp
#ifndef SOME_HEADER_HPP
#define SOME_HEADER_HPP
class baseclass
{
public:
baseclass(){};
std::map<std::string, std::function<void()>> methods_map;
void call_method(const std::string &name){
auto it = methods_map.find(name);
if(it != methods_map.end())
it->second();
else std::cout << "Method " << name << " not exists";
}
};
#endif
与 main.cpp 相比
#include "some_header.hpp"
class inherited : public baseclass{
public:
inherited():baseclass(){};
void new_meth(){
std::cout << "Hello, stackoverflow!";
}
};
int main(){
std::vector<baseclass*> objects;
auto temp = new inherited();
objects[0].methods_map["new"]=&temp->new_meth;
objects[0].call_method("new");
}
这个变量不起作用,无法创建指向成员函数的非常量指针 所以,我的问题是:是否有可能这样做以及如何做?
【问题讨论】:
-
问题:这里为什么需要继承?这看起来不像这里需要的东西。如果你解释一下你需要实现什么样的功能,也许会更好。
标签: c++ oop polymorphism std