相关疑难解决方法(0)

如何解决std :: function没有operator ==的事实?

问题:以下代码非常具有表现力和简洁性,如果不一定快,则不是因为它不能编译.

它无法编译,因为您无法将std :: function实例与operator ==()进行比较.而std :: find()试图做到这一点.

当然,我可以采用完全不同的实现方式,但是我很顽固,因为我喜欢下面的代码,我正在寻找"尽可能接近"的东西.

谁可以为我提供一个相当重写的代码,下面的代码也做同样的事情?

#include <functional>
#include <vector>

typedef std::function<bool(int)> Tester_t;
typedef std::vector<Tester_t> TesterSet_t;

bool Test(TesterSet_t &candidates, int foo)
{
    TesterSet_t dropouts;
    for( auto& tester : candidates )
    {
        if(!tester(foo))    
        {
            droputs.push_back(tester);
        }
    }

    while(!dropouts.empty())
    {
        // The following line is not compiling because std::function has no operator==()
        TesterSet_t::iterator culprit = 
            std::find( candidates.begin(), candidates.end(), dropouts.back() );
        candidates.erase(culprit);
        dropouts.pop_back();
    }
    return !candidates.empty();
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

比较std :: tr1 :: function <>对象

我一直在尝试用C++实现类似C#的事件系统,其中tr1函数模板用于存储处理事件的函数.

我创建了一个向量,以便可以将多个侦听器附加到此事件,即:

vector< function<void (int)> >  listenerList;
Run Code Online (Sandbox Code Playgroud)

我希望能够从列表中删除处理程序以阻止侦听器接收事件.

那么,如何在此列表中找到与给定侦听器对应的条目?我可以测试列表中的"函数"对象是否指向特定函数吗?

谢谢!

编辑:看过boost :: signal方法,看起来它可能是使用令牌系统实现的,正如你们所建议的那样.这是关于此的一些信息.观察者在附加到事件时保留"连接"对象,并且此连接对象用于在需要时断开连接.所以看起来你是使用Boost还是使用tr1自己动手,基本原理是一样的.即它会有点笨拙:)

c++ function tr1

5
推荐指数
2
解决办法
6917
查看次数

比较成员函数的 std::function

我尝试搜索类似的问题:
问题 1
问题 2

但无论如何,我无法比较成员函数。这是一个例子:

class ClassA
{
public:
    int add(int a, int b)
    {
        return a + b;
    }
};

int main()
{
    ClassA a1{};

    function<int(int, int)> f1 = bind(&ClassA::add, a1, placeholders::_1, placeholders::_2);
    function<int(int, int)> f2 = bind(&ClassA::add, a1, placeholders::_1, placeholders::_2);

    cout << boolalpha << "f1 == f2 " << (f1.target_type() == f2.target_type()) << endl; // true
    cout << (f1.target<int(ClassA::*)(int, int)>() == nullptr) << endl; // true

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

从代码中可以明显看出f1f2是不同的。第一个cout显示true …

c++ function-pointers function c++11

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

标签 统计

c++ ×3

c++11 ×2

function ×2

function-pointers ×1

tr1 ×1