首页 > 解决方案 > 有没有办法为容器类型创建运算符/函数重载

问题描述

我有一些课程,例如:

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::liststd::vector

那么,如何解决它,是否可以使用这种过载?

标签: c++c++11templates

解决方案


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&)

现场演示


推荐阅读