gpt4 book ai didi

c++ - 我可以在参数包扩展中调用所有基类的函数吗?

转载 作者:太空狗 更新时间:2023-10-29 21:13:49 24 4
gpt4 key购买 nike

有没有办法让我下面的 run 函数调用参数包中包含的所有基类的 run 函数?使用标准的 c++ 设施/库或我自己的模板元编程?首选 C++11,但也对后来的标准感兴趣。

代码简化为最基本的例子。我最初对此有一个用例,但现在我主要感兴趣的是是否可以通过它来提高我的理解。

template <class ...Bases> class Test : public Bases...
{
public:
void run()
{
// QUESTION: I want to call the run function of ALL the bases,
// Is there a way to do this that compiles and works?
Bases.run()...;
}
};

class One
{
public:
void run() {}
};

class Two
{
public:
void run() {}
};

int main()
{
Test<One, Two> test;
test.run();
}

最佳答案

好吧,这只是普通的包扩展。它们是您的基类这一事实不会造成太大影响。

C++11:

int _[]{0, (void(Bases::run()), 0)...};
(void) _;

C++17:

(void)(Bases::run(), ...);

关于c++ - 我可以在参数包扩展中调用所有基类的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42828810/

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