我想知道是否可以,传入一个类的实例的指针,获取它的成员函数并将其存储在列表中。我会怎么做?我将如何存储一个类的成员函数?
0
A
回答
0
简便方法是使用一些模板魔术和继承:
template<class R>
class Base {
public:
virtual R Execute() const=0;
};
template<class R, class P1, class P2>
class Derived : public Base<R> {
public:
void set_params(P1 p1, P2 p2) { m_p1 = p1; m_p2 = p2; }
R Execute() const { return Map(m_p1,m_p2); }
protected:
virtual R Map(P1, P2) const=0;
private:
P1 m_p1;
P2 m_p2;
};
template<class T, class R, class P1, class P2>
class MemFunc : public Derived<R,P1,P2> {
public:
MemFunc(T *object, R (T::*fptr)(P1, P2)) : object(object), fptr(fptr) { }
virtual R Map(P1 p1, P2 p2) const { return (object->*fptr)(p1,p2); }
private:
T *object;
R (T::*fptr)(P1,P2);
};
然后main()函数看起来像:
int main() {
std::vector<Base<int>*> vec;
Object o;
Derived<int, float,float> *ptr = new MemFunc(&o, &Object::MyFunc);
ptr->set_params(10.0,20.0);
vec.push_back(ptr);
int i = vec[0].Execute();
}
当你想要一个类的所有成员函数存储,你需要几个向量:
std::vector<Base<int>*> vec_int;
std::vector<Base<float>*> vec_float;
std::vector<Base<MyObject>*> vec_myobject;
0
很长的答案,这里是一个教程,在C++函数指针tutorial page
简而言之,这里是一个将函数指针存储在数组中的示例。注意未编译。
typedef void(*pFunc)(void); //pFunc is an alias for the function pointer type
void foo1(){};
void foo2(){}
int main(){
pFunc funcs[2] = {&foo1, &foo2}; //hold an array of functions
}
现在的成员函数有一点不同的语法:
struct Foo{
void foo1(){}
void foo2(){}
}
typedef (*Foo::pFunc)(); //pFunc is an alias to member function pointer
int main(){
pFunc funcs[2] = {&Foo::foo1, &Foo::foo2};
}
最好的办法是检查出我放在这里的链接。它深入研究了sytax等等。如果你正在使用新的C++ 11,那么你可以使用std :: function,或者如果你有提升,你可以使用boost :: function。
相关问题
- 1. 存储类的成员函数
- 2. 如何将函数存储为类成员变量
- 3. 如何将函数指针中的函数保存为类的成员函数?
- 4. C++类 - 如何从另一个成员函数引用成员函数
- 5. 在一个类的成员中保存一个函数指针
- 6. 如何将一个boost :: bind对象存储为一个类成员?
- 7. 使用另一个类成员的类成员函数指针
- 8. 如何将成员函数传递给另一个成员函数?
- 9. 如何从另一个类的成员函数中访问数据成员和成员函数?
- 10. 分配一个函数的类成员
- 11. 调用一个类的成员函数?
- 12. 执行一个类的成员函数
- 13. 成员函数的存储位置?
- 14. C++存储一个指向未知类的成员函数的指针
- 15. 一个非成员函数如何实现一个类的朋友函数呢?
- 16. 如何存储和执行基类中的衍生类成员函数
- 17. C++ - 通过成员函数更改一个类的成员值
- 18. Laravel:呼叫成员函数存储()null
- 19. 如何将一个类成员(变量?)传递给一个函数?
- 20. 如何访问另一个类中的一个类的成员函数?
- 21. SubSonic SimpleRepository存储成员类
- 22. 如何在python的类成员函数上做一个断点?
- 23. 如何构造一个带有成员函数的deque类? C++
- 24. 如何在form1.aspx中使用一个类的成员函数
- 25. 如何在函数中定义一个类的静态成员?
- 26. 如何在一个类的成员函数上使用numba?
- 27. 存储和后来调用未知类的成员函数
- 28. 如何将一个成员函数名称赋值给一个函数对象?
- 29. 如何将成员函数中的矢量传递给同一类中的另一个成员?
- 30. 通过另一个类的成员函数调用一个类的成员函数?
你是指在反射或只是提供一个函数在类中返回一个列表? – chris
您无法在运行时找到成员函数。如果你确切知道你想在编译时存储哪些函数,那是不同的 –
C++不是C#。没有与类的实例关联的元数据。因此,你想要的是不可能的。 – nakiya