У меня есть функция-член класса, в которой я бы хотел использовать совершенную пересылку для одного из параметров. Тем не менее, функция пересылается только для принятия единственного аргумента типа 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>>
но не компилируется. Как я могу правильно использовать псевдонимы в этом случае?
Вы имеете в виду 'template>'? –
Jarod42
Это все трюк! Благодаря! –