我的代码有几个实例,其中函数在遇到 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 */
}
还是有更好的方法来编写几乎相同的移动和复制功能?