gpt4 book ai didi

C++11 typelist unroller 和静态函数的代理调用者

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:39 27 4
gpt4 key购买 nike

在 C++11 中是否有一种简单的方法可以做到这一点?如果可能的话,我想同时保留多重继承和循环访问包中所有静态函数的能力。

#include <cstdio>

struct A { static void foo() {printf("fA\n");} static void bar() {printf("bA\n");} };
struct B { static void foo() {printf("fB\n");} static void bar() {printf("bB\n");} };
struct C { static void foo() {printf("fC\n");} static void bar() {printf("bC\n");} };

template <typename... T>
struct Z : public T... {
static void callFoos() {
/* ???? WHAT'S THE SYNTAX
T...::foo();
T::foo()...;
*/
}

static void callBars() {
/* ???? WHAT'S THE SYNTAX
T...::bar();
T::bar()...;
*/
}

};

int main() {
Z<A, B, C>::callFoos();
Z<A, B>::callBars();
}

最佳答案

添加一组调度程序函数重载:

void foo_caller() { }

template <typename T, typename ...Args>
void foo_caller()
{
T::foo();
foo_caller<Args...>();
}

然后在callFoos()中使用:

foo_caller<T...>();

关于C++11 typelist unroller 和静态函数的代理调用者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16325136/

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