合并一组模板专用化
merge a group of template specializations
我有 3 个函数模板专用化,代码完全相同。我已经尝试了一段时间,但无法成功将它们合并到单个模板表达式中。下面是一个示例:
template <typename Event>
void aFunction(const Event &anEvent){
// do nothing for other types
}
template <>
void aFunction(const InsertEvent &anEvent){
std::cout<<"aFunction"<<std::endl;
}
template <>
void aFunction(const RemoveEvent &anEvent){
std::cout<<"aFunction"<<std::endl;
}
template <>
void aFunction(const ChangeEvent &anEvent){
std::cout<<"aFunction"<<std::endl;
}
编辑: 我尝试使用 std::enable_if_t 合并它们,并且我已经能够按以下步骤进行:
template <typename Event>
typename std::enable_if_t<
!std::is_same<Event, InsertEvent>::value &&
!std::is_same<Event, RemoveEvent>::value &&
!std::is_same<Event, ChangeEvent>::value>
aFunction(const Event &anEvent){
// do nothing for other types
}
template <typename Event>
typename std::enable_if_t<
std::is_same<Event, InsertEvent>::value ||
std::is_same<Event, RemoveEvent>::value ||
std::is_same<Event, ChangeEvent>::value>
aFunction(const Event &anEvent){
std::cout<<"aFunction"<<std::endl;
}
相反,是否有可能摆脱 !std::is_same<..更通用的模板案例>行?
这是一种可能的方法:
template <typename Event>
void aFunction(const Event &anEvent, std::false_type){
// do nothing for other types
}
template <typename Event>
void aFunction(const Event &anEvent, std::true_type){
std::cout<<"aFunction"<<std::endl;
}
template <typename Event>
void aFunction(const Event &anEvent){
aFunction(anEvent, std::integral_constant<bool,
std::is_same_v<Event, InsertEvent> ||
std::is_same_v<Event, RemoveEvent> ||
std::is_same_v<Event, ChangeEvent>>{});
}
演示
相关文章:
- 在 c++ 中拥有一组结构的正确方法是什么?
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 一组值的零开销下标运算符
- 使用一组结构,避免在一组结构中出现重复的结构
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 合并一组模板专用化
- 如何更好地检查两个 char 变量是否在一组值中?
- C++有没有办法强制重写一组方法,如果其中一个方法在子类中具有重写?
- 给定一个枢轴点,按照它们与枢轴点构成的角度递增顺序对一组点进行排序
- 如何从一组变量中查找最低值
- 如何根据对的第二个元素对 STL c++ 中的一组对进行排序?
- 如何通过查找迭代器结果分配给一组对的元素
- 读取一组用户输入,按升序排序,然后打印结果
- 如何从一组具有从左到右优先级的整数值创建有序整数键?
- 在 c++ 中定义一组 set 的迭代器
- 使用 C++20 概念强制类实现一组方法
- 这是定义一组递归规则的正确方法吗?
- C++ 将一组对象传递给抽象类的成员函数
- 哗啦��错误:无法识别任何一组可以驱动指定关节的控制器