我可以分析一段代码,如下所示:
class DPD_API gain_phase_calibrate : virtual public gr::block
{
public:
typedef boost::shared_ptr<gain_phase_calibrate> sptr;
static sptr make();
};
从这段代码中,我了解到一个名为DPD_API的类正在被创建,并且它是从gr::block类继承的。我不明白的是gain_phase_calibrate。这是函数名还是类名?有人能给我解释一下吗?
1条答案
按热度按时间qyzbxkaa1#
代码片段声明了一个名为
gain_phase_calibrate
的API类,它继承自gr::block
。这里,DPD_API
是该类的可选属性,请参见class declaration on cppreference。DPD_API
宏将扩展到平台和编译器特定的代码,这些代码控制类的可见性,即是否可以从库外部调用。用简单的英语来说,这段代码是“这里有一个名为
gain_phase_calibrate
的类,如果使用这个库,可以从代码中调用它”。这些宏在C++库中很常见,通常称为
FOO_EXPORT
或FOO_API
(如本例所示)。过去,*NIX上的共享对象使所有符号可见,而微软的DLL只暴露那些带有
__declspec(dllexport)
宏的符号。同时,选择性地暴露API符号也在 *NIX上流行起来。在GCC wiki on Visibiliy中可以找到GCC的一个很好的总结(以及与Windows上的情况的比较)。它还提供了一些与问题中的示例代码类似的示例代码。