私はネットワークライブラリを作成しており、ファイル記述子の所有権を処理するために移動セマンティクスを多用しています。私のクラスの1つは、他の種類のファイル記述子ラッパーを受け取り、所有権を取得したいと考えているので、次のようになります。
struct OwnershipReceiver
{
template <typename T>
void receive_ownership(T&& t)
{
// taking file descriptor of t, and clear t
}
};
複数の無関係な型を処理する必要があるため、receive_ownershipはテンプレートである必要があります。安全のために、右辺値参照にのみバインドすることを望みます。これにより、ユーザーは左辺値を渡すときにstd::moveを明示的に指定する必要があります。
receive_ownership(std::move(some_lvalue));
ただし、問題は次のとおりです。C++テンプレートの推定により、余分な労力をかけずに左辺値を渡すことができます。そして、私は実際に、誤って左辺値をreceive_ownershipに渡し、後でその左辺値(クリア済み)を使用することによって、自分自身を一度撃ちました。
だからここに質問があります:テンプレートを右辺値参照にのみバインドする方法は?