是否可以将std :: deque的成员函数作为参数传递?

时间:2019-05-12 06:18:09

标签: c++ function c++11 member-functions stddeque

我想根据用户输入使用push_frontpush_back。是否可以将其包含在function参数中,然后编写一个函数以保存在内存中?

2 个答案:

答案 0 :(得分:2)

  

是否可以将其包含在function参数中?

。你不能。

在此讨论中可以找到很好的解释: Can I take the address of a function defined in standard library?


但是,可以通过明确告诉函数插入位置来解决该问题。

#include <iostream>
#include <deque>

enum class To{ front = 0, back };

void func(std::deque<int>& dq, const int value, const To where)
{
    if (where == To::front)
    {
        dq.push_front(value);
        // code
    }
    else if(where == To::back)
    {
        dq.push_back(value);
        // code
    }
}

你叫它

std::deque<int> dq;
func(dq, 1, To::back);
func(dq, 2, To::front);

答案 1 :(得分:1)

可以使用lambda:

#include <deque>

void f(bool user_input) {
    using C = std::deque<int>;
    using FnType = void(*)(C&, int);
    FnType const fns[2] = {
        [](C& c, int value) { c.push_front(value); },
        [](C& c, int value) { c.push_back(value); }
    };
    C q;
    fns[user_input](q, 1);
    fns[!user_input](q, 2);
}

在此示例中,由lambda表达式创建的闭包具有0个捕获,因此可以转换为纯函数指针。当捕获数大于0时,可以使用std::function代替普通函数指针。