我不确定标题,因为我不确定问题来自容器的“可复制性”。我尝试了一切,但我无法摆脱这个错误。
这是我的代码的简化版本(请不要挑战类设计,我真的很想将最终使用的语法保留在 BOOST_FOREACH 中):
template <typename T>
class MyContainer
{
public:
typedef typename std::vector<T>::iterator iterator;
typedef typename std::vector<T>::const_iterator const_iterator;
MyContainer(std::vector<T>& vec, boost::mutex& mutex) :
m_vector(vec),
m_lock(mutex)
{
}
iterator begin() { return m_vector.begin(); }
const_iterator begin() const { return m_vector.begin(); }
iterator end() { return m_vector.end(); }
const_iterator end() const { return m_vector.end(); }
private:
std::vector<T>& m_vector;
boost::lock_guard<boost::mutex> m_lock;
};
template <typename T>
struct GetContainer
{
GetContainer(std::vector<T>& vec, boost::mutex& mutex) :
m_vector(vec),
m_mutex(mutex)
{
}
MyContainer<T> Get()
{
return MyContainer<T>(m_vector, m_mutex);
}
std::vector<T>& m_vector;
boost::mutex& m_mutex;
};
int main()
{
std::vector<int> v;
v.push_back(1);
v.push_back(2);
boost::mutex m;
GetContainer<int> getter(v, m);
BOOST_FOREACH(int i, getter.Get())
{
std::cout << i << std::endl;
}
return 0;
}
编译器抱怨没有 MyContainer::MyContainer(const MyContainer&) 的复制构造函数。我也有:错误:没有匹配函数调用'MyContainer::MyContainer(boost::foreach_detail_::rvalue_probe >::value_type)'</p>
但是,使
MyContainer<T> : private boost::noncopyable
不能解决问题。也不定义函数
boost_foreach_is_noncopyable
或专门化模板结构
is_noncopyable
对于 MyContainer (事实上,我如何将这个模板专门用于模板类型?)
最后一个“提示”:如果我从任何地方删除互斥锁和锁(我只是将向量传递给 GetContainer 和 MyContainer),它就可以工作。但如果我做它不起作用
MyContainer<T> : private boost::noncopyable
(我希望它应该如此,所以我不确定我的问题出在 BOOST_FOREACH 上,但可能是因为我用 getter 返回了 MyContainer 的副本?)
如果您在此处阅读我,我将感谢您,并提前感谢您的帮助。