我已经实现了如下的ReadLock:
在myClass.h中
#include <boost/thread/locks.hpp>
#include <boost/thread/shared_mutex.hpp>
typedef boost::shared_mutex Lock;
typedef boost::shared_lock< Lock > ReadLock;
Lock myLock;
在myClass.cpp中:
void ReadFunction() const
{
ReadLock r_lock(myLock); // Error!
//Do reader stuff
}
该代码在VS2010中有效,但在GCC4.0中失败。编译器在ReadLock上抛出错误,说没有匹配的函数。我怀疑是&#34; const&#34;变量myLock的正确性问题。当我删除函数声明中的const时,错误消失了。任何人都可以向我解释一下吗?为什么这可以在windows下工作但不能用gcc工作?
这里有什么建议吗?感谢。
答案 0 :(得分:2)
您应该从const
移除ReadFunction()
限定符,因为qualifying a non-member function with cv
或 ref 限定符是非法的,甚至没有意义;或者你在class
中封装你想要做的任何事情。
void ReadFunction() const
{
ReadLock r_lock(myLock); // Error!
//Do reader stuff
}
const
只能应用于成员函数。上面的代码不是成员函数,如果是,它将是(例如,一个名为MyClass
的类):
void MyClass::ReadFunction() const
{
ReadLock r_lock(myLock);
//Do reader stuff
}
在这种情况下,您通常需要lock
成为mutable
成员。通过这样声明:
class MyClass{
....
mutable Lock myLock;
};