【发布时间】:2012-08-28 11:19:10
【问题描述】:
免责声明我不允许使用 BOOST 或任何其他库,只能使用标准库。
在我的班级Foo 我有一个模板函数foo,它有两个参数:一个pointer-to-object 和一个pointer-to-this-object-成员函数。如您所见,foo 函数适用于任何类的指针。我不知道,什么类将传递给它。该函数创建一个模板结构的实例。
template <typename TypeName>
struct Bar
{
void(TypeName::*action)();
TypeName* objPtr;
};
template <typename TypeName> void Foo::foo ( void(TypeName::*action)() , TypeName* objPtr )
{
Bar <TypeName> bar;
bar.action = action;
bar.objPtr = objPtr;
};
我的问题是:如何存储foo 中创建的Bar 的对象,以便稍后遍历它们并调用pointer-to-an-object-member-function 像这样:
(BarStorage[i].objPtr->*BarStorage[i].action)();
【问题讨论】:
-
pointer-to-an-object-member-function 本质上是一个 delegate。也许它会帮助你。
-
你甚至不允许使用标准库,在 C++11 中对 function objects and binding 有很好的支持?
-
你不能存储
Bar的实例,因为Bar是一个类模板,所以你不能创建它的实例。 -
只允许使用标准,包括 C++11。
-
所以
std::function和std::bind应该足够了。
标签: c++ templates pointers function-pointers pointer-to-member