实际上,我正在尝试将游客模式与一些模板一起使用。
我想解析包含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");
}
}
};
如果有人知道如何解决它,我将很乐意接受!谢谢
最佳答案
您应该尝试打印i.first.name()
而不是仅i.first
关于c++ - ‘operator<<’不匹配(操作数类型为 ‘std::ostream’ {aka ‘std::basic_ostream<char>’}和 ‘const std::type_index’),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58997858/