假设我们有一些类:
class A
{
public:
static void m() {}
}
class B
{
public:
static void m() {}
}
template<typename... T>
class C
{
public:
void c()
{
T::m(); // Call somehow m() of A and B, if T is a parameter pack of A and B
}
}
如何扩展参数包并为每种类型调用静态方法?
这样做的问题是,我们不能仅仅扩展参数包并在函数体内将其称为裸包,因为它不是有效的上下文。
void c()
{
T::m()...; //invalid context for parameter pack expansion
}
有许多技巧可以解决此问题。我通常使用的杠杆std::initializer_list
:
void c()
{
(void)std::initializer_list<int> { (T::m(), 0)... }; //valid context
}
在C ++ 17中,我们将获得折叠表达式,这将大大简化事情:
void c()
{
(T::m(), ...); //much nicer
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句