小编Arn*_*aiz的帖子

C++ 无序映射 - 没有可行的重载运算符[]

我正在尝试构建一个值备忘录,使用 unordered_map 将一对整数链接到一个整数。

int memo(pair<int, int> &p, unordered_map<pair<int, int>, int> &memo) {
    if (memo[p] != -1) {
    }
}
Run Code Online (Sandbox Code Playgroud)

我以为我会用pair来访问unordered_map中的值,但我收到了一个错误:

与“operator[]”不匹配(操作数类型为“std::unordered_map<std::pair<int, int>, int>”和“std::pair<int, int>”)

c++

2
推荐指数
1
解决办法
2706
查看次数

将函数模板作为参数传递而不指定模板类型

现在我有这个:

template<typename T>
static void equalize(Image<T>& image) {
    // implementation
}

...

// receive signal from GUI
void applyEqualize(int row) {
        auto variant = *images[row];

        if (std::holds_alternative<Image<ushort>>(variant)) {
            Image<ushort>& image = std::get<Image<ushort>>(variant);
            equalize<ushort>(image);
        }

        else if (std::holds_alternative<Image<float>>(variant)) {
            Image<float>& image = std::get<Image<float>>(variant);
            equalize<float>(image);
        }
}
    
...

private:
        std::vector<std::shared_ptr<std::variant<Image<ushort>, Image<float>>> images;
Run Code Online (Sandbox Code Playgroud)

我希望能够调用一个包装函数,该函数采用函数模板并执行变体类型检查并调用该函数,但我无法弄清楚如何在不指定类型名的情况下传递函数模板。像这样的东西:

template <template<class> class F>
void Wrapper(F&& f, int row)
{
        auto variant = *images[row];

        if (std::holds_alternative<Image<ushort>>(variant)) {
            Image<ushort>& image = std::get<Image<ushort>>(variant);
            f<ushort>(image);
        }

        else if (std::holds_alternative<Image<float>>(variant)) {
            Image<float>& image …
Run Code Online (Sandbox Code Playgroud)

c++ templates variant

1
推荐指数
1
解决办法
56
查看次数

标签 统计

c++ ×2

templates ×1

variant ×1