相关疑难解决方法(0)

绑定兰斯达?

我有一个关于哪种样式是首选的问题:std :: bind Vs lambda在C++ 0x中.我知道它们服务于某些不同的目的,但我们举一个交叉功能的例子.

使用lambda:

uniform_int<> distribution(1, 6);
mt19937 engine;
// lambda style
auto dice = [&]() { return distribution(engine); };
Run Code Online (Sandbox Code Playgroud)

使用bind:

uniform_int<> distribution(1, 6);
mt19937 engine;
// bind style
auto dice = bind(distribution, engine);
Run Code Online (Sandbox Code Playgroud)

我们应该选择哪一个?为什么?假设与上述示例相比情况更复杂.即一个优于另一个的优点/缺点是什么?

c++ lambda functional-programming bind c++11

52
推荐指数
5
解决办法
3万
查看次数

将成员函数分配给实例成员的属性

我仍然可以在C ++中找到自己的方式,并且遇到了问题。我有一个包含另一个类(不能从其继承)的实例成员的类,其中包括回调。我想将此回调注册到父类,但遇到困难。

经过一番挖掘之后,我了解了方法!=函数,因为一个实例方法隐式地希望它本身有一个实例(我可以描述它的最佳方式!),这std::bind是一个选择,但是当签名为时我无法使它起作用。不<void(void)>

我还阅读了有关实现为接口的方法,类似于委托(我来自Swift背景),这也很有吸引力。

这是我要达到的目标的准系统版本:

class ChildClass
{
public:
    std::function<int(int)> callback;
};

class MainClass
{
public:
    ChildClass childClass;

    MainClass()
    {
        this->childClass.callback = this->square;
    }

private:
    int square(int i)
    {
        return i * i;
    }
};
Run Code Online (Sandbox Code Playgroud)

我知道类型不匹配会导致错误,但是我不知道如何使它们一起玩。

c++ function callback instance c++11

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

为什么我不能constexpr绑定?

所以说我想制作一些constexpr仿函数,虽然我可以使用它bind.有什么我想念的吗?为什么不能bind退货constexpr

鉴于:

struct foo {
    int b() const { return _b; }
    int a() const { return _a; }
    int r() const { return _r; }
    const int _b;
    const int _a;
    const int _r;
};
Run Code Online (Sandbox Code Playgroud)

我想要:

constexpr auto sumB = bind(plus<int>(), placeholders::_1, bind(&foo::b, placeholders::_2));
constexpr auto sumA = bind(plus<int>(), placeholders::_1, bind(&foo::a, placeholders::_2));
constexpr auto sumR = bind(plus<int>(), placeholders::_1, bind(&foo::r, placeholders::_2));
Run Code Online (Sandbox Code Playgroud)

有什么我可以做的工作吗?

c++ bind functor constexpr c++11

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