template<typename Mutex>
class CMutexLock
{
public:
CMutexLock(Mutex& mutexIn, const char* pszName, const char* pszFile, int nLine, bool fTry = false) : lock(mutexIn, boost::defer_lock)
{
if (fTry)
TryEnter(pszName, pszFile, nLine);
else
Enter(pszName, pszFile, nLine);
}
};
typedef CMutexLock<CCriticalSection> CCriticalBlock;
#define LOCK(cs) CCriticalBlock criticalblock(cs, #cs, __FILE__, __LINE__)
我正在学习开源代码,不知道,#cs
中的#是什么意思,并且如果可能的话,它在该代码中做了什么?
在#define LOCK(cs) CCriticalBlock criticalblock(cs, #cs, __FILE__, __LINE__)
中使用它,它是从CMutexLock模板定义LOCK(cs)
来构造CMutexLock类的,它在CMutexClass构造函数上的第二个参数上接收指向空终止字符串的指针
答案 0 :(得分:2)
在#define
宏中,在符号前的#
意味着对符号“进行字符串化”,这意味着继续执行该符号的符号会被引用。
例如,给定此宏:
#define STR(x) #x
像这样使用:
char *p = STR(hello);
替换为:
char *p = "hello";