我已经实现了一个ReadLock如下:
In my 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上抛出错误,说没有匹配的函数。我怀疑是变量myLock的"const"正确性问题。当我删除函数声明中的const时,错误消失了。有人能给我解释一下吗?为什么这在windows下工作,而不是与gcc?
有什么建议吗?谢谢。
您应该从ReadFunction()
中删除const
限定符,因为用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;
};