На самом деле, я пытаюсь использовать шаблон посетителя с некоторыми шаблонами.
Я хочу проанализировать мой unordered_map
, который содержит type_index
и переменную function
, но я получаю ошибку компиляции, которую я не понимаю, даже после прочтения множества тем об этом.
error: no match for ‘operator<<’ (operand types are ‘std::ostream’ {aka ‘std::basic_ostream<char>’} and ‘const std::type_index’)
std::cout << i.first << i.second << std::endl;
Вот мой цикл, который не компилируется
for (auto i : functions) {
std::cout << i.first << i.second << std::endl;
}
Вот мой фрагмент кода с моим циклом для анализа и отображения того, что находится внутри unordered_map
template <typename TReturn> struct AnyVisitor {
using typeInfoRef = std::reference_wrapper<const std::type_info>;
using function = std::function<TReturn(std::any &)>;
std::unordered_map<std::type_index, function> functions;
template <typename TArg> void accept(std::function<TReturn(TArg &)> f) {
functions.insert(std::make_pair(std::type_index(typeid(TArg)),
function([&f](std::any &x) -> TReturn {
return f(std::any_cast<TArg &>(x));
})));
for (auto i : functions) {
std::cout << i.first << i.second << std::endl;
}
}
TReturn operator()(std::any &x) {
try {
auto function = functions.at(std::type_index(x.type()));
return function(x);
} catch (...) {
throw std::runtime_error("No visitor registered");
}
}
};
Если у кого-то есть идея, как это решить, я с радостью возьмусь за нее! Спасибо
std::type_index
не имеет определенногоoperator <<
. - person NathanOliver   schedule 22.11.2019std::cout << i.first.name()
? - person Yksisarvinen   schedule 22.11.2019std::type_index
не определен оператор вывода - person NathanOliver   schedule 22.11.2019operator<<
, чтобы иметь возможность выводить тип вstd::ostream
- person Slava   schedule 22.11.2019