![](/img/trans.png)
[英]C++ initializer list capabilities: call functions without initializing member?
[英]c++ List of classes without initializing them for use of static functions
我可能以一种奇怪的方式问这个问题,但是我不确定还有什么要问的。
我想要一个类列表,而不是对象。 这样,我无需创建对象就可以调用静态函数。
在这一点上,我真的更喜欢函数指针:
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函数(它只是需要访问更多作用域)。
您正在寻找的是boost类型列表 。 我不过不推荐潜入了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
作为解决方案,您可以创建方法指针列表
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();
...
我认为您的要求是不可能的,至少不会以您的想法。 您不能具有变量,数组,容器类或类型名称的任何其他存储。 所以你不能做这样的事情
ListOfClasses[n]::someStaticMember(...);
在C ++中。 是不可能的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.