std容器是否有插入任何容器的通用方法? 我现在想做的是扩展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容器是否有插入任何容器的通用方法? 我现在想做的是扩展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; } };,c++,stl,insert,containers,C++,Stl,Insert,Containers,但是当我试图在std::map上使用它时,我最终遇到了一个问题,因为这行whereVecObjects.push_back(*iterObject) 现在,我想要一种通用的方法来完成上面的代码,这将适用于所有std容器 有这样的方法吗?尝试使用插入而不是推回 whereVecObjects.insert(whereVecObjects.end(), *iterObject); 我认为你需要更一般的质询 template <class T, template<class, class

但是当我试图在std::map上使用它时,我最终遇到了一个问题,因为这行
whereVecObjects.push_back(*iterObject)

现在,我想要一种通用的方法来完成上面的代码,这将适用于所有std容器


有这样的方法吗?

尝试使用插入而不是推回

whereVecObjects.insert(whereVecObjects.end(), *iterObject);
我认为你需要更一般的质询

template <class T, template<class, class...> class Container>
class Queryable
  : public Container<T>
{
  // ...
}
模板
类可查询
:公共货柜
{
// ...
}

另外,我认为您只需要在容器中使用Queryable。请参见

否,您必须为每个容器类别指定一个。不学习Boost的人注定要重新发明它们(糟糕)。@JerryCoffin谢谢,但我已经看过boosts版本,它没有完成我需要的所有功能。请记住,上面提供的例子是专门用来说明我的问题的,而不是我上的全部课程。在我看来,你的工作做得很差。特别是,一个容器应该只包含。试图扭曲容器以使其执行与包含对象无关的操作是一个糟糕的想法。是的,我知道这件事以前做过很多次,一开始似乎是个好主意——那是警笛试图把你引诱到岩石上。@JerryCoffin我现在很好奇,你能给我举个例子,说明一个容器有什么逻辑是不好的吗?
template <class T, template<class, class...> class Container>
class Queryable
  : public Container<T>
{
  // ...
}