4

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();
}
4

2 に答える 2

5

一連のディスパッチャー関数のオーバーロードを追加します。

void foo_caller() { }

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

次に内部で使用しますcallFoos()

foo_caller<T...>();
于 2013-05-01T19:39:48.980 に答える