パラメーターの 1 つに完全転送を使用したいクラスのメンバー関数があります。ただし、転送される関数は type の単一の引数のみを受け入れるc2Type
ため、呼び出し元の関数も引数のみを受け入れるようにしたいと思いc2Type
ますが、転送を行うには明らかにユニバーサル参照を保持する必要があります。次のようなデフォルトのテンプレートパラメータを使用して達成できるようです:
class c2Type
{
// some data members...
};
template<typename T, typename isC2Type = typename std::enable_if<
std::is_same<c2Type, typename std::decay<T>::type>::value>::type>
void configurationMessageHandler(T&& message)
{
// some stuff...
mapAddress(std::forward<c2Type>(message));
}
mapAddress(c2Type&& message)
{
// do stuff...
};
ただし、いくつかのメンバー関数でこのタイプを確認する必要があります。また、このような長いテンプレートは、使いにくく、読みにくいようです。私がしたいのは、次のisC2Type
ようなエイリアスを作成することです
template<typename T>
using isC2Type = typename std::enable_if<
std::is_same<c2Type, typename std::decay<T>::type>::value>::type;
configurationMessageHandler
テンプレートが次のようになると思いました
template<typename T, isC2Type<T>>
しかし、それはコンパイルされません。この場合、エイリアスを適切に使用するにはどうすればよいですか?