Есть ли способ заставить компилятор выдавать ошибку всякий раз, когда я помещаю строку вместо объекта nlohmann :: json? - PullRequest
2 голосов
/ 14 февраля 2020

У меня есть ситуация, когда моему методу требуется объект nlohmann :: json в качестве аргумента.

class MyClass {
  public:
    MyClass();
    ~MyClass();

    bool parse(const nlohmann::json& configuration);
};

Мой нынешний подход к получению JSON, что хорошо, следующий :

std::string filePath = "../folder/folder/file.json"
std::ifstream file(filePath);
nlohmann::json configJSON = nlohmann::json::parse(file);

MyClass object;
object.parse(configJSON);

Моя проблема в том, что компилятор принимает следующий фрагмент кода, но я хочу, чтобы он различал std::string и nlohmann::json, чтобы убедиться, что я уже передаю JSON анализируемый объект, а не случайная строка.

std::string filePath = "../folder/folder/file.json"

MyClass object;
object.parse(filePath);

Затем в методе разбора я получаю ошибку времени выполнения при запуске программы, потому что, конечно, я пытаюсь получить доступ к строке способом, который невозможен .

Есть ли способ сделать это либо в коде, либо с флагом компиляции в CMakeList.txt?

1 Ответ

4 голосов
/ 14 февраля 2020

Вы можете добавить удаленную перегрузку:

class MyClass {
  public:
    MyClass();
    ~MyClass();

    bool parse(const nlohmann::json& configuration);
    bool parse(const std::string&) = delete;
    // bool parse(const char*) = delete; // Else you would have ambiguous call error message
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...