(c ++) std :: make_unique <something> - PullRequest
       31

(c ++) std :: make_unique <something>

1 голос
/ 20 апреля 2020

возникла небольшая проблема с кодом, подобным следующему:

Абстрактный класс датчика (я использую полиморфизм):

class Sensor //abstract class
{
    public:
    Sensor(int id, std::string name):id_{id},name_{name}{}

    private
    int id_;
    std::string name_;
}

Датчик температуры для реализации класса датчика (это может быть возможен любой датчик (давление, ускорение ... но мне нужен пример).


class Temperature : public Sensor
{
    public:
    Temperature (int id, std::string name):Sensor{id, name}
    ~Temperature(){}
};

Основной код:

std::string sensor = "Temperature"; 
//but sometimes this is the name of another sensor "Pressure" or "Speed" for example

std::vector<std::unique_ptr<Sensor>> sensorList

sensorList.push_back(std::make_unique<sensor>(01, "test"));

Проблема с линией sensor.push_back(std::make_unique<sensor>(01, "test"));, я не могу знать, что будет в std::string sensor, исключая тот факт, что это именно та строка, которую я напишу для вызова соответствующего датчика (например, для создания датчика температуры мне потребуется std::make_unique<Temperature>(01, "test"), поэтому я пишу: std::string sensor = Temperature).

Как я могу кодировать это, потому что я не могу кодировать кучу условий if, потому что датчики будут добавлены / удалены позже в программе, и я не знаю, какие из них.

Хорошего дня

Timtanium

...