我正在使用提升使用调试一些应用程序并达到了这一点:
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)
答案 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 { ... };