首页 > 解决方案 > 通过继承和多态重构代码

问题描述

我不太清楚如何重构代码,以便我可以在派生类上调用 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 类中调用派生类setClientisClient函数,该类包含所有变量的所有客户端。但是它们不存在于基类中,因为它们采用不同的参数。很少有人建议动态铸造。我觉得这样做是不正确的。

任何帮助都非常受欢迎。

标签: inheritancepolymorphismrefactoring

解决方案


推荐阅读