原代码
template class ProductCreator = AbstractProduct *(*)(),
class MapContainer = std::map>
这里的AbstractProduct ()()是什么意思?
顺便问题下,有个叫Canbus的类里构造函数这么写的
Canbus() :
monitor_logger_(apollo::common::monitor::MonitorMessageItem::CANBUS) {}
其中monitor_logger_是另一个类的实例,这是什么写法,表示什么意思,能否顺便回答一下
AbstractProduct ()()
解析下(*)() 这是个函数指针,返回值是指向AbstractProduct类型的指针.
(*)() 通过函数的地址进行执行, 比如有个函数是fun(); pfun = fun;//函数名是地址
(*pfun)() 就等于执行了fun(); 然后AbstractProduct * fun(); 您能看懂了吗?
AbstractProduct ()()是一个函数指针吧!返回值是AbstractProduct *,参数为空。
一般被称作指针运算符,又叫反向取址运算符,与&作用相反 指针,其实就是一个变量,只是它的值是另一个变量或是常量的地址罢了,而的作用便是把这个地址所存放的值取出,所以叫作反向取址运算符 。
这是范式工厂的概念,一般都是为了解决N个产品,就必须有N个名字不同的生成函数或者N个Functor,这样很麻烦。monitor_logger_(apollo::common::monitor::MonitorMessageItem::CANBUS)是初始化
函数指针,存放函数地址,参数为空,
指向该变量的具体值
monitor_logger_(apollo::common::monitor::MonitorMessageItem::CANBUS) {}是构造函数初始化
定义一个返回值为指针类型的函数指针!