是否可以调用静态方法形式的可变参数模板类型参数?

Elvedin Hamzagic

假设我们有一些类:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以修复可变参数模板函数的参数?

在C ++中可变参数模板中是否有对函数参数实施类型限制的好方法?

非类型可变参数模板参数

当可变参数模板类从模板参数继承时,在调用基类型的方法时扩展参数包

是否可以从可变参数模板调用多个基类构造函数?

是否可以构建具有不同类型的可变参数模板?

在C ++ 14的可变参数模板中是否有一个优雅的解决方案可以在可调用类型和不可调用类型之间进行选择

是否可以从函数模板返回可变参数的lambda?

可变参数模板的静态继承

基准可变参数模板函数调用

可变参数模板函子调用

缺省类型的可变参数模板

可变参数模板类型推导

迭代可变参数模板类型

动态值的可变参数模板类型

可变参数模板中的求和类型

迭代可变参数模板中的类型

C ++:如何在可变参数模板参数上调用带有类型参数的函数?

可变参数模板对

可变参数模板:遍历类型/模板参数

调用作为参数接收的可变参数模板的可变参数模板

重载可变参数模板化方法

是否可以在没有显式专门化的情况下调用可变参数模板函数?

可变参数模板参数:我可以根据类型选择引用还是值?

检查第 n 个可变参数模板参数是否属于某种类型

检查是否在可变参数模板参数包中传递类型

有什么方法可以将成对的元组剥离为可变参数模板类型或实例化具有可变参数类型的对象?

是否可以在可变参数模板函数中扩展非变量参数?

可变参数模板将类型参数解压缩