Есть ситуация, когда я хочу собрать все имена узлов пути к ключу в JSON. Рассмотрим условие индекса массива «0», «1» также допускается, но легко забыть кавычки, которые могут привести к сбою при разыменовании. Поэтому я хочу отказаться от этого. Пример:
#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;
}
Я нашел и попробовал это. Как избежать неявных преобразований в не конструирующих функциях? следующим образом:
#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;
}
Но компилятор до сих пор не понял меня.
Любое предложение?
Пожалуйста, укажите на любое неправильное использование терминологии и предположений, спасибо!
nullptr
также запретить ?
std::vector<const char*>
вместоstd::vector<std::string>>
?