对于具有成员函数指针和参数的每个调用函数

时间:2016-03-10 02:11:40

标签: c++ lambda member-function-pointers

我做了一个模板列表的简单实现:

template<typename T>List{
    [...]
private:
    class ListElement{
        ListElement * next;
        T* value;
    };
    ListElement *first, *last;
};

现在我希望能够为每个&#34;写一个&#34;方法,它接受一个函数指针指向类型为T的成员函数,并为每个项调用该函数,并可以将任意参数传递给这些函数调用,如:

List<Item> list = new List<Item>();
[...]
list.for_each_call(&Item::update, time_passed);

通过调用update(int time_passed)方法来更新列表中的每个项目时间。

我可以通过实现这个来解决这个问题:

void List<T>::for_each_call(void (*func) (T*)){
    for(ListElement * current = this->first; current != nullptr; current = current->next)
         func(current->value);
}

每次我想在每个存储值上调用一个方法时,我都会用这样的函数调用该函数:

void call_update(Item* item){
    item->update(globally_set_update_value_before_calling_for_each);
}

但我已经创建了8个不同的全局定义&#34; call_X&#34;方法,这开始变得烦人。

我可以实现上面描述的内容吗? Lambda表达式也可以在这里使用。

是的,我正在尝试明确地处理任何std :: stuff,看​​看如何在没有它的情况下实现它。

1 个答案:

答案 0 :(得分:0)

您要求&#34;也可以将任意参数传递给这些函数调用&#34;非常需要使用模板和参数包。

template<typename func_type, typename ...Args>
void for_each_call(func_type &&func, Args && ...args)
{
    for(ListElement * current = first; current != nullptr; current = current->next)
         func(current->value, std::forward<Args>(args)...);
}