括号中的课堂名称是什么?C

What comes after class name in braces? C++

本文关键字:是什么 课堂      更新时间:2023-10-16

我正在调试一些具有boost用法的应用程序,并达到了这一点:

template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> 
class BOOST_MEM_FN_NAME(mf3)
{
public:
BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3))
F f_;
 ...
some irrelevant code here..

这是什么意思?BOOST_MEM_FN_NAME(mf3)这在mem_fn_template.hpp中我以前从未看过这种语法。class ClassName(something)

作为其名称样式(所有CAPS 下划线)建议,我想这是一个宏,它将扩展到看起来不像identifier(identifier)的Somethine。然后一切都开始有意义。

快速的Google搜索显示原始代码(在第44行):

#define BOOST_MEM_FN_NAME(X) inner_##X

取决于是否定义了其他宏,它具有多个定义:

#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl
#define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall
#define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall

结果,它将扩展到各种名称

class inner_mf3;
class inner_mf3_cdecl;
class inner_mf3_stdcall;
class inner_mf3_fastcall;

它是一个宏..

#define BOOST_MEM_FN_NAME(X) inner_##X

它只是在您要放置的任何类名称之前都附加inner_

这是一个宏。它在mem_fn.hpp中定义为:

#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl

因此,

class BOOST_MEM_FN_NAME(mf3) { ... };

转化为

class inner_mf3_cdecl { ... };