gpt4 book ai didi

c++ - 将本地结构传递给 count_if

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:53 26 4
gpt4 key购买 nike

我正在尝试将匿名结构传递给 std::count_if,但编译失败。

当我尝试编译时(使用 g++ 4.5.3,不使用 c++03 或 c++11 扩展),我在 fail() 方法中遇到错误,但是pass() 方法没有那个错误。

In function ‘void fail()’:
Test.cpp:34:24: error: no matching function for call to ‘count_if(std::map<int, int>::iterator, std::map<int, int>::iterator, fail()::<anonymous struct>&)’

如果我将结构设为命名结构,我会遇到类似的错误。我不明白为什么在函数外部和内部声明它应该有所不同。我错过了什么?

#include <map>
#include <algorithm>

typedef std::map<int, int> Map;

void fail()
{
struct {
bool operator()(Map::value_type const& value)
{
return value.second > 0;
}
} checker;

Map map;
std::count_if(map.begin(),
map.end(),
checker);
}

struct Checker {
bool operator()(Map::value_type const& value)
{
return value.second > 0;
}
};
void pass()
{
Map map;
Checker checker;
std::count_if(map.begin(),
map.end(),
checker);
}

最佳答案

根据 C++03 规范,不允许使用本地类型作为模板参数。 2011 年 C++ 修订版取消了此限制。

限制的基本原因是担心为本地类型创建唯一名称。但是,开发了一些技术来创建适用于所有系统的唯一名称。

关于c++ - 将本地结构传递给 count_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20804864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com