小编Dat*_*ore的帖子

当涉及std :: function或lambda函数时,C++ 11不推断类型

当我定义这个功能时,

template<class A>
set<A> test(const set<A>& input) {
    return input;
}
Run Code Online (Sandbox Code Playgroud)

我可以使用test(mySet)代码中的其他地方调用它,而无需显式定义模板类型.但是,当我使用以下功能时:

template<class A>
set<A> filter(const set<A>& input,function<bool(A)> compare) {
    set<A> ret;
    for(auto it = input.begin(); it != input.end(); it++) {
        if(compare(*it)) {
            ret.insert(*it);
        }
    }
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

当我使用此函数调用时filter(mySet,[](int i) { return i%2==0; }); ,出现以下错误:

错误:没有匹配函数来调用'filter(std :: set&,main()::)'

但是,所有这些版本都可以工作:

std::function<bool(int)> func = [](int i) { return i%2 ==0; };
set<int> myNewSet = filter(mySet,func);

set<int> myNewSet = filter<int>(mySet,[](int i) { return i%2==0; });

set<int> myNewSet …
Run Code Online (Sandbox Code Playgroud)

c++ lambda templates c++11

54
推荐指数
3
解决办法
1万
查看次数

静态数据成员初始化

为什么静态数据成员初始化必须在类之外?

class X
{
public:
      int normalValue = 5; //NSDMI
      static int i;
};

int X::i = 0;
Run Code Online (Sandbox Code Playgroud)

为什么静态数据成员(此处为"i")只是一个声明,而不是一个定义?

c++ g++ c++11

19
推荐指数
2
解决办法
3万
查看次数

标签 统计

c++ ×2

c++11 ×2

g++ ×1

lambda ×1

templates ×1