Es gibt eine Situation, in der ich alle Knotennamen eines Pfads zu einem Schlüssel in JSON sammeln möchte. Bedenken Sie, dass die Bedingung des Array-Index "0", "1" ebenfalls zulässig ist, aber es ist leicht, die Anführungszeichen zu vergessen, was zu einem Absturz führen würde, wenn eine Dereferenzierung durchgeführt wird. Also möchte ich das ablehnen. Beispiel:
#include <vector>
#include <iostream>
int func(const std::vector<const char*>& pin) {
return pin.size();
}
int main() {
// {"aname", "3", "path", "0"} wanted but this still compile
std::cout << func({"aname", "3", "path", 0}) << std::endl;
}
Ich habe dies gefunden und ausprobiert. Wie vermeide ich implizite Konvertierungen für nicht konstruierende Funktionen? wie folgt:
#include <vector>
#include <iostream>
int func(const std::vector<const char*>& pin) {
return pin.size();
}
template<typename T>
int func(T pin) = delete;
int main() {
std::cout << func({"aname", "3", "path", 0}) << std::endl;
}
Aber der Compiler hat mich immer noch nicht verstanden.
Irgendein Vorschlag?
Bitte weisen Sie auf einen Missbrauch von Terminologien und Annahmen hin, danke!
nullptr
?
std::vector<const char*>
anstelle von verwendenstd::vector<std::string>>
?