std::function简单的理解

            之前转载了一篇关于std::function,讲的太专业了,但是貌似看懂了,但是没能深入理解,今天在看案例时,突然懂得了。

#define STRINGIFY(x) #x

#define TRANS(__className__) {                                      \
    [](float t, Scene* s){ return __className__::create(t,s);},     \
        STRINGIFY(__className__),                                   \
    }
struct _transitions {
    std::function<TransitionScene*(float t, Scene* s)> function;
    const char * name;
} transitions[] = {
    TRANS(TransitionMoveInL),
    TRANS(TransitionMoveInR),
    TRANS(TransitionMoveInT),
    TRANS(TransitionMoveInB),

   };

TransitionsTests::TransitionsTests()
{
    int sceneIndex = 0;

    for (auto& test : transitions)
    {
        addTestCase(test.name, [sceneIndex](){
            auto scene = TransitionsTest::create();
            // fix bug #486, without setDepthTest(false), FlipX,Y will flickers
            Director::getInstance()->setDepthTest(false);

            if (sceneIndex % 2)
            {
                scene->addChild(TestLayer2::create(transitions[sceneIndex].name));
            }
            else
            {
                scene->addChild(TestLayer1::create(transitions[sceneIndex].name));
            }

            return transitions[sceneIndex].function(TRANSITION_DURATION, scene);
        });

        sceneIndex++;
    }
}
TransitionMoveInL,TransitionMoveInR,TransitionMoveInT,TransitionMoveInB,这四个函数都是TransitionScene的子类,当我们定义了std::function<TransitionScene*(float t,Scene* s)>function时,这个function就可以代表四个子类了,这样做的目的就是为了赋值或是初始化。这样我们就可以使用for循环进行,避免了一个一个的初始化,减轻工作量,同时方便函数的使用。

多说一句:[ ](){return ;},这个符号一直没看懂,今天终于 看懂了[ ]可以理解为数组符号,()理解为构造函数的参数,{return; }代表返回的函数。

`std::for_each` 是 C++ 标准库中的一个算法函数,它用于对指定范围内的元素进行迭代并应用指定的操作。 `std::for_each` 的使用方法如下: ```cpp std::for_each(first, last, function); ``` 其中: - `first` 和 `last` 是表示要迭代的范围的迭代器,表示要处理的元素的起始和结束位置。这个范围包含了要应用操作的元素。 - `function` 是一个可调用对象,用于作用于范围内的每个元素。可以是函数指针、函数对象、lambda 表达式等。它可以有一个参数,该参数表示范围内的当前元素。 `std::for_each` 会依次对范围内的每个元素应用指定的操作,并且不返回任何值。它只是简单地应用函数,没有修改元素本身或返回任何结果。 以下是一个示例代码,展示了如何使用 `std::for_each`: ```cpp #include <iostream> #include <vector> #include <algorithm> void printElement(int element) { std::cout << element << " "; } int main() { std::vector<int> numbers = {1, 2, 3, 4, 5}; std::for_each(numbers.begin(), numbers.end(), printElement); return 0; } ``` 输出结果为:1 2 3 4 5 上述示例中,我们定义了一个 `printElement` 函数,用于打印每个元素。然后,我们使用 `std::for_each` 函数对 `numbers` 容器中的每个元素应用 `printElement` 函数,从而打印出所有元素。 希望这个简单的示例能够帮助你理解 `std::for_each` 函数的基本用法。如果有任何进一步的问题,请随时提出。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值