以下代码不起作用。它的目的是将参数传递给可变参数基类。这是可能的,如果可行,那么实施它的正确方法是什么? (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);
}
答案 0 :(得分:6)
这更容易,它适用于(GCC和Clang的近期版本):
template<class... Args>
Visited(const Args&... args) : Visitors(args)... {}
每个基类使用一个参数。如果您想要完美转发参数,请使用稍微简洁的一点:
template<class... Args>
Visited(Args&&... args) : Visitors(std::forward<Args>(args))... {}
在这两种情况下,请考虑为explicit
只是一个类并且您希望避免意外转换的情况添加Visitors
。