私のコードには、T&&またはconstT&に遭遇したときに関数の反応がわずかに異なるインスタンスがいくつかありますが、関数自体は非常に長いです(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 */
}
または、ほぼ同じ移動およびコピー関数を作成するためのより良い方法はありますか?