我目前正在尝试做的是扩展 C++ std 容器的功能。所以我这样做了
template<typename T>
class Queryable : public T
{
public:
    template<typename lambdaFunc>
    Queryable<T>Where(const lambdaFunc& w)
    {
        Queryable<T> whereVecObjects;
        for(auto iterObject = this->cbegin();
            iterObject != this->cend();
            ++iterObject)
        {
            bool add = w(*iterObject);
            if(add == true)
            {
                whereVecObjects.push_back(*iterObject);
            }
        }
        return whereVecObjects;
    }           
};
所以这个类所做的是它接受模板中的一个 std 容器并创建一个继承自它的类。然后它定义了它想要在容器上扩展的功能。
现在,如果您std::vector像这样使用,我上面提供的这个示例可以正常工作
int main()
{
    Queryable<std::vector<int>> vecInt;
    vecInt.push_back(1); vecInt.push_back(2); vecInt.push_back(3); vecInt.push_back(4); vecInt.push_back(5); 
    Queryable<std::vector<int>> filteredVec = vecInt.Where([](int i){ return i > 3; } );
    for(auto iter = filteredVec.begin();
        iter != filteredVec.end();
        ++iter)
    {
        std::cout << *iter << ", ";
    }
}
但是当我尝试在 std::map 上使用它时,由于这条线,我最终遇到了问题whereVecObjects.push_back(*iterObject); 
现在我想要一种通用方法来执行上面的代码,该代码适用于所有 std 容器。
有没有这样的方法?