我正在尝试构建一个值备忘录,使用 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>”)
现在我有这个:
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)