可变基类的初始化

fox*_*cub 3 c++ templates variadic c++11

以下代码不起作用.它的目的是将参数传递给可变参数基类.这是可能的,如果是这样,实施它的正确方法是什么?(Clang的错误信息是:an initializer for a delegating constructor must appear alone,我不明白.)

template<class... Visitors>
class Visited: public Visitors...
{
    public:
        template<class F>
        Visited(const F& f): F(f)               {}

        template<class F, class... Rest>
        Visited(const F& f, const Rest&... r):
            F(f), Visited(r...)                       {}
};

struct A {};
struct B {};
struct C {};

int main()
{
    A a;
    B b;
    C c;
    Visited<A,B,C> v(a, b, c);
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*rey 7

这更容易,它适用于GCC和Clang的(最新版本):

template<class... Args>
Visited(const Args&... args) : Visitors(args)... {}
Run Code Online (Sandbox Code Playgroud)

每个基类使用一个参数.如果您想要完美转发参数,请使用稍微简洁:

template<class... Args>
Visited(Args&&... args) : Visitors(std::forward<Args>(args))... {}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,请考虑为只有一个类explicit的情况添加,Visitors并且您希望避免意外转换.

实例