1

我已经实现了如下的 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 处抛出错误,说没有匹配的函数。我怀疑是变量 myLock 的“const”正确性问题。当我删除函数声明中的 const 时,错误消失了。有人可以向我解释一下吗?为什么这在 Windows 下有效,但在 gcc 下无效?

这里有什么建议吗?谢谢。

4

1 回答 1

2

您应该从 中删除const限定符ReadFunction(),因为使用ref限定符限定非成员函数cv是非法的,甚至没有意义;或者你将你想要做的任何事情封装在一个.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;
};
于 2016-11-04T03:30:52.163 回答