【发布时间】:2013-01-29 14:15:51
【问题描述】:
我的代码有几个实例,其中函数在遇到 T&& 或 const T& 时的反应略有不同,但是函数本身很长(注意 T 只是一些对象类型)。例如:
void push_back(const T& newt){
/* code block X */
new (ptr) T(newt);
/* code block Y */
}
void push_back(T&& newt){
/* code block X */
new (ptr) T(std::move(newt));
/* code block Y */
}
是否可以按照这个伪代码的行写一些东西:
template<typename S>
void push_back(S newt){
/* code block X */
#if decltype(newt)==T&&
new (ptr) T(std::move(newt));
#else
new (ptr) T(newt);
#endif
/* code block Y */
}
或者有没有更好的方法来编写几乎相同的移动和复制函数?
【问题讨论】:
标签: c++ templates c++11 move-semantics decltype