1

パラメーターの 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>>

しかし、それはコンパイルされません。この場合、エイリアスを適切に使用するにはどうすればよいですか?

4

1 に答える 1