c++ - 有没有办法为容器类型创建运算符/函数重载
问题描述
我有一些课程,例如:
class A {
A& operator=(const A& a);
A& operator=(const int a);
A& operator=(const std::string& a);
};
我为 iterable 制作了类型特征is_iterable
;如何operator=
为可迭代类型实现重载?
我的做法:
template<typename TContainer, std::enable_if_t<is_iterable<TContainer>::value>>
A& operator=(const TContainer& val) {
// do stuff
}
no viable overload
但是当我尝试喂食时它不起作用导致错误std::list
或std::vector
。
那么,如何解决它,是否可以使用这种过载?
解决方案
当is_iterable<TContainer>::value
为 true 时,std::enable_if_t<is_iterable<TContainer>::value>
is void
,它不是一个有效的非类型模板参数。将您的容器重载定义为
template<typename TContainer,
std::enable_if_t<is_iterable<TContainer>{}, int*> = nullptr>
A& operator=(const TContainer&)
推荐阅读
- vue.js - Computed property “eleron” was assigned to but it has no setter
- python - Search Form in Django with python
- mysql - 使用正确密码的 Node 应用程序连接 mysql 失败
- python - 从 tkinter 中的画布中删除数据
- angular - 在 Angular 应用程序中嵌入 SVG 图像
- google-colaboratory - 重新连接到 Colaboratory 时,我的电脑崩溃了
- c# - Pass variable values from Xamarin.Android to Xamarin.Forms
- java - 强制改造以加载新数据
- android - 是否可以使用模型查看器触发显式意图?
- python - Flask render_template not being called after Thread