inheritance - 通过继承和多态重构代码
问题描述
我不太清楚如何重构代码,以便我可以在派生类上调用 getter 和 setter,这些派生类接受和返回不同类型的参数。请记住它的不可编译代码,只是一个代码结构。任何帮助是极大的赞赏。
class InputVariableClient
{
const int variableID;
public:
InputVariableClient(const int variable_id) : variableID(variable_id) {}
virtual bool isRegistered() = 0;
virtual bool resetRegister() = 0;
};
class SocketClient : public InputVariableClient
{
net::Socket *clientID;
public:
TCPRegister(const int variable_id, net::Socket *id) : Register(variable_id), clientID(id) {}
bool isRegistered() override { return clientID != nullptr_t; }
bool resetRegister() override { clientID == nullptr; }
bool setClientID(net::Socket *clientID) { ... }
bool isClientID(net::Socket *clientID) { return clientID == id; }
};
class GuidClient : public InputVariableClient
{
std::unique_ptr<std::array<int8_t, 16>> clientID;
private:
GuidClient(const int variable_id, std::array<int8_t, 16> id) : Register(variable_id), clientID(id) {}
bool isRegistered() override { return clientID != nullptr_t; }
bool resetRegister() override { clientID == nullptr; }
bool setClientID(std::array<int8_t, 16> id) {}
bool isClientID(std::array<int8_t, 16> id) { return clientID == id; }
};
class InputVariableRegistry
{
std::array<std::unique_ptr<InputVariableClient>, static_cast<int>(InputData::N_INPUT_DATA)> input_registry;
public:
InputVariableRegistry() {}
bool isRegistered(const int variable_id) const
{ /* check for clientID NULL*/
}
bool doRegister(int variable_id, InputVariableClient client);
{ /* input_registry[variable_id] = client*/
}
bool isClient(int variable_id, std::array<int8_t, 16> > guid)
{
}
bool isClient(int variable_id, net::Socket *clientID)
{
}
};
我想从 InputVariableRegistry 类中调用派生类setClient
的isClient
函数,该类包含所有变量的所有客户端。但是它们不存在于基类中,因为它们采用不同的参数。很少有人建议动态铸造。我觉得这样做是不正确的。
任何帮助都非常受欢迎。
解决方案
推荐阅读
- performance - 什么时候在 Velocity 中评估字符串?
- abap - 将键值映射到结构
- spring-boot - SpringBoot Spring Security 不能将给定的过滤器仅应用于一个路径
- clojure - 如何将 .edn 文件包含为另一个“父”.edn 文件的子集,例如 .xml 文件中的“包含路径”元素?
- shopify - 使用礼品卡在 Shopify 中购买产品时如何禁用其他付款方式?
- asp.net - 如何在 NServiceBus 路由中给出另一个解决方案的路由?
- spring-boot - 获取并解码来自 RestTemplate spring boot 的响应
- c# - Append XML string block save document
- ruby-on-rails - 如何将 CURL 请求转换为 Ruby Gem HTTPClient
- javascript - 导出 pdf UTF-8 编码