大括号中的课名后面是什么? C ++

时间:2017-12-14 16:09:06

标签: c++ class boost syntax

我正在使用提升使用调试一些应用程序并达到了这一点:

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)

3 个答案:

答案 0 :(得分:2)

它是一个宏......

#define BOOST_MEM_FN_NAME(X) inner_##X

它只是在您尝试放置的任何类名之前附加inner_

答案 1 :(得分:2)

正如其命名风格(全部大写+下划线)所示,我认为它是一个宏,它将扩展到其他不像identifier(identifier)的东西。然后这一切开始变得有意义。

快速Google搜索会显示original code(第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;

答案 2 :(得分:2)

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

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

因此,

class BOOST_MEM_FN_NAME(mf3) { ... };

转换为

class inner_mf3_cdecl { ... };