回答
我真的喜欢函数指针在这一点上:
struct A
{
void SomeFunc(int);
};
struct B
{
void AnotherFunc(int);
};
typedef void (*Function)(int);
std::vector<Function> vec;
vec.push_back(A::SomeFunc); vec.push_back(B::AnotherFunc);
for (Function f: vec)
{
f(2);
}
注意,静态函数是或多或少相当于到一个传统的C函数(它只需要访问更多的范围)。
http://www.boost.org/doc/libs/1_45_0/libs/mpl/doc/refmanual/refmanual_toc.html
如:
typedef vector<C1,C2,C3> types;
at_c<types,0>::type::method();
...
你的链接不是很有帮助。至少解释了应该如何处理它。 – 2011-01-29 05:49:04
另外,我真的不会推荐`使用mpl :: vector;`或`using namespace mpl;`。与std :: vector混淆的可能性太大了。 – 2011-01-29 10:51:12
作为一个解决方案,您可以创建方法指针列表
我不知道你在问的是可能的,至少不会在你认为的方式。您不能拥有变量,数组,容器类或任何其他类型名称的存储。所以你不能做像
ListOfClasses[n]::someStaticMember(...);
在C++中。是不可能的。
您要找的是boost typelists。然而,如果您还不是非常经验模板,并且知道他们有多少错综复杂的工作,我不会建议潜入Boost MPL。
现在一个简单的自制实现:
struct Null {};
template <typename Type, typename Next>
struct List
{
typedef Type Type;
typedef Next Next;
};
//Now you can make lists like so:
typedef List<int, List<float List<short, Null> > > MyList;
从那里使用递归模板化的实现打电话给你想要的静态方法。
如果您想对这类技术的更多信息,请阅读Modern C++ Design
- 1. 如何在类初始化时使用非静态类函数初始化静态函数指针?
- 2. 使用静态初始化函数
- 3. C++静态成员指向函数 - 如何初始化它?
- 4. 如何在C++中使用函数初始化静态成员
- 5. 使用静态构造函数初始化一个类?
- 6. 呼叫在构造函数初始化列表非静态函数,C++
- 7. 懒属性初始化静态类C#
- 8. 静态初始化C++
- 9. 在C++中的类构造函数中初始化列表初始化
- 10. C++静态数据成员初始化
- 11. 初始化静态指针数组C++
- 12. 静态初始化的Java序列化
- 13. 静态初始化数组?
- 14. 初始化一个类中的静态数据成员(类)C++
- 15. 静态初始化
- 16. C++ - 如何初始化成员函数内的静态变量?
- 17. C++ - 类方法函数指针的unordered_map的初始化列表
- 18. 如何在C++中使用未初始化的静态数组?
- 19. 用初始化器列表中的空构造函数初始化父类?
- 20. .NET中的静态类初始化
- 21. 内部类的静态初始化器?
- 22. 静态HashMap的初始化
- 23. Spring的静态初始化
- 24. 动态初始化和使用C++ STL列表数组
- 25. C++使用CLI数组初始化静态int值
- 26. 加载DLL不初始化静态C++类
- 27. 使用静态初始化块与Mockito
- 28. C++类初始化列表和传递函数
- 29. 尝试使用它初始化数组时,未标识C++ const静态成员
- 30. 使用不同长度的数组静态初始化结构
你能再详细一点吗?你打算用这些课程做什么?你想要调用哪些静态函数?这是在编译时还是在运行时? – templatetypedef 2011-01-29 05:47:06
我想将一个类的列表注册到工厂类的列表中。迭代这些类来寻找我需要的类(使用静态方法),然后实例化并返回它。 – Jeremiah 2011-01-29 13:29:33