【发布时间】:2014-08-02 22:42:38
【问题描述】:
我有一个这样的模板结构
template<typename ... Args> struct A;
template<>
struct A<>{
};
template<typename First, typename ... Args>
struct A<First, Args...>:private A<Args...>{
typedef A<Args...> child;
typedef A<First, Args...> self;
typedef First type;
static const size_t size = 1 + sizeof...(Args);
type value;
template<typename ... _Args>
A(First && first, _Args && ... args) :child(forward<_Args>(args)...),value(move(first)){}//move
template<typename ... _Args>
A(const First & first, _Args && ... args) :child(forward<_Args>(args)...), value(first){}//assign
};
如果我像下面这样调用这个结构;
int f= 6;
A<int, int, int> g(f, 5, f); //it is working
A<int&> i(f);//not working compile error
第二个不起作用,因为右值构造函数无法将第一个赋值给值。
第二个工作应该怎么做?
【问题讨论】:
-
_Args是保留标识符(以下划线开头,后跟大写字母)。
标签: c++ templates constructor lvalue rvalue