我想使用push_front
或push_back
取决于用户输入。是否可以将其包含在函数参数中,然后编写一个函数以节省内存?
问问题
695 次
2 回答
3
是否可以将其包含在函数参数中?
没有。你不能。
在这个讨论中可以找到一个很好的解释: 我可以获取标准库中定义的函数的地址吗?
但是,可以通过明确告诉函数应该在哪里插入来解决问题。
#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);
于 2019-05-12T06:45:21.357 回答
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
时可以使用而不是普通函数指针。
于 2019-05-12T09:48:35.113 回答