我有一个类的成员函数,我想对其中一个参数使用完美转发。但是,被转发到的函数只接受一个 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
like创建一个别名
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>>
但这不会编译。在这种情况下如何正确使用别名?