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)
这更容易,它适用于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并且您希望避免意外转换.
| 归档时间: |
|
| 查看次数: |
793 次 |
| 最近记录: |