gpt4 book ai didi

c++ - 是否可以从可变参数模板类型参数调用静态方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:07 27 4
gpt4 key购买 nike

假设我们有类:

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
}

Demo

在 C++17 中我们将得到 fold expressions这将大大简化事情:

void c()
{
(T::m(), ...); //much nicer
}

关于c++ - 是否可以从可变参数模板类型参数调用静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31204084/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com