我做了一个模板列表的简单实现:
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,看看如何在没有它的情况下实现它。
答案 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)...);
}