我有一些类:
class A {
A& operator=(const A& a);
A& operator=(const int a);
A& operator=(const std::string& a);
};
我为可迭代 is_iterable
制作了类型特征;
如何为可迭代类型实现 operator=
的重载?
我的方法:
template<typename TContainer, std::enable_if_t<is_iterable<TContainer>::value>>
A& operator=(const TContainer& val) {
// do stuff
}
但当我尝试输入 std::list
或 std::vector
时,它不起作用导致 no viable overload
错误。
那么,如何修复它,是否可以使用这种重载?
最佳答案
当 is_iterable<TContainer>::value
是真的,std::enable_if_t<is_iterable<TContainer>::value>
是void
,这不是有效的非类型模板参数。将您的容器过载定义为
template<typename TContainer,
std::enable_if_t<is_iterable<TContainer>{}, int*> = nullptr>
A& operator=(const TContainer&)
关于c++ - 有没有办法为容器类型创建运算符/函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52008689/