65,211
社区成员
发帖
与我相关
我的任务
分享
#include <pthread.h>
#include <map>
#include <algorithm>
#define MapIter map<KeyType, ValueType>::iterator
using namespace std;
template<typename KeyType, typename ValueType>
class CThreadSafeMap
{
public:
//typedef map<KeyType, ValueType>::iterator MapIter; //编译器对这样的类型不允许typedef,为何?
CThreadSafeMap();
~CThreadSafeMap();
MapIter Find( const KeyType& key ) const; //提示MapIter不能作为返回类型
void Insert( const pair<KeyType, ValueType>& entry );
private:
map<KeyType, ValueType> map_;
pthread_rwlock_t lock_;
};
template<typename KeyType, typename ValueType>
CThreadSafeMap<KeyType, ValueType>::CThreadSafeMap()
{
pthread_rwlock_init( &lock_, NULL );
}
template<typename KeyType, typename ValueType>
CThreadSafeMap<KeyType, ValueType>::~CThreadSafeMap()
{
pthread_rwlock_destroy( &lock_ );
}
template<typename KeyType, typename ValueType>
MapIter CThreadSafeMap<KeyType, ValueType>::Find( const KeyType& key ) //此处同上
{
pthread_rwlock_rdlock( &lock_ );
MapIter iter = map_.find( key ); //此处能够通过编译
pthread_rwlock_unlock( &lock_ );
return iter;
}
template<typename KeyType, typename ValueType>
void CThreadSafeMap<KeyType, ValueType>::Insert( const pair<KeyType, ValueType>& entry )
{
pthread_rwlock_wrlock( &lock_ );
map_.insert( entry );
pthread_rwlock_unlock( &lock_ );
}
MapIter CThreadSafeMap<KeyType, ValueType>::Find( const KeyType& key )
#define MapIter map<KeyType, ValueType>::iterator //你后面定义了局部的,这里又声明一个宏,而且这样的宏定义还是有问题的
using namespace std;
template<typename KeyType, typename ValueType>
class CThreadSafeMap
{
public:
//typedef map<KeyType, ValueType>::iterator MapIter; //编译器对这样的类型不允许typedef,为何?