【发布时间】:2020-06-03 21:09:49
【问题描述】:
目前我的代码看起来很像
#include <map>
#include <string>
#include <functional>
void SomeFunc();
void SomeOtherFunc();
struct Calls {
std::string name;
std::function<void(void)> a, b;
};
struct BaseClass
{
static const std::map<std::string, Calls> callbacks;
const std::map<std::string, Calls>* pCallbacks = &callbacks; // Run-time polymorphism, pointers are *typically* upcast back to base class.
};
const std::map<std::string, Calls> BaseClass::callbacks = {{"testX", {"x", SomeFunc, SomeOtherFunc}}};
void MoreFuncs();
void MoreFuncs2();
struct DerivedClass : BaseClass
{
static const std::map<std::string, Calls> callbacks;
const std::map<std::string, Calls>* pCallbacks = &callbacks;
};
const std::map<std::string, Calls> DerivedClass::callbacks = {
{"testX", {"x", SomeFunc, SomeOtherFunc}},
{"testY", {"g", MoreFuncs, MoreFuncs2}}};
struct DeepClass : DerivedClass
{
static const std::map<std::string, Calls> callbacks;
const std::map<std::string, Calls>* pCallbacks = &callbacks;
};
const std::map<std::string, Calls> DeepClass::callbacks = {
{"testX", {"x", SomeFunc, SomeOtherFunc}},
{"testY", {"g", MoreFuncs, MoreFuncs2}},
{"testZ", {"h", SomeOtherFunc, MoreFuncs2}},
};
体积更大。 以这种方式扩展很累,并且在我看来会留下太多的视觉集群。有什么技术可以让这更容易吗?
【问题讨论】:
标签: c++ oop inheritance stl