我有以下代码:
std::unordered_map<std::string, std::vector<std::unique_ptr<class EventTrigger>>> triggers;
if (triggers.end() == triggers.find(eventName)) {
triggers[eventName] = {};
}
Run Code Online (Sandbox Code Playgroud)
这会导致有关使用已删除的 unique_ptr 构造函数的错误。另一方面,如果我这样做,一切都可以正常编译:
if (triggers.end() == triggers.find(eventName)) {
triggers[eventName] = std::vector<std::unique_ptr<class EventTrigger>>();
}
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么会这样?我认为空的初始化列表会导致一个空的向量被分配给triggers[eventName].
我有以下代码块:
std::visit([&](auto &&arg)
{
using T = std::decay_t<decltype(arg)>;
if constexpr (
std::is_same_v<T, size_t> ||
std::is_same_v<T, int> ||
std::is_same_v<T, double> ||
std::is_same_v<T, bool>
) {
document->AddMember(value.first.c_str(), arg, allocator);
}
else if constexpr (std::is_same_v<T, std::string>){
document->AddMember(
rapidjson::StringRef(value.first.c_str()),
rapidjson::StringRef(arg.c_str()),
allocator
);
}
else if constexpr (std::is_same_v<T, std::shared_ptr<Serializable>>) {
// TODO
}
else if constexpr (std::is_same_v<T, std::vector<std::string>>) {
for (const auto &strVal: arg) {
// TODO
}
}
else if constexpr (std::is_same_v<T, std::vector<std::shared_ptr<Serializable>>>) {
for (const auto &strVal: arg) {
// TODO
}
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取经纬度坐标的Openlayers地图的当前中心。我有以下事件处理程序设置:
this.map.on('pointermove', function (e) {
if (e.dragging) {
console.log(that.map.getView().getCenter());
}
});
Run Code Online (Sandbox Code Playgroud)
这行得通,但我得到了奇怪的价值观。这是一个例子:
[9318218.659044644, 3274618.6225819485]
Run Code Online (Sandbox Code Playgroud)
这些显然不是纬度/经度值:)我需要以某种方式进行转换吗?谢谢!