TimeStamp в SQL Server 2000

Макрорасширение не работает, как расширение пакета аргументов с вариативными шаблонами. То, что у вас есть, будет расширяться до:

X,Y::do();

И не

X::do(); Y::do();

Как вы надеялись. Но в C ++ 11 вы можете использовать вариативные шаблоны. Например, вы могли бы сделать то, что хотите, таким образом:

#include 

struct X { static void foo() { std::cout << "X::foo()" << std::endl; }; };
struct Y { static void foo() { std::cout << "Y::foo()" << std::endl; }; };
struct Z { static void foo() { std::cout << "Z::foo()" << std::endl; }; };

int main()
{
    do_foo();
}

Все, что вам нужно, это (относительно простая) техника:

namespace detail
{
    template
    struct do_foo;

    template
    struct do_foo
    {
        static void call()
        {
            T::foo();
            do_foo::call();
        }
    };

    template
    struct do_foo
    {
        static void call()
        {
            T::foo();
        }
    };
}

template
void do_foo()
{
    detail::do_foo::call();
}

Вот live пример .

1
задан gbn 21 November 2010 в 08:45
поделиться