怎么理解OpenFoam中的runTimeSelection机制?
-
@金石为开 本质上是 hashTable 的使用。在基类里调用宏函数 declareRunTimeSelectionTable 创建了一个 hashTable,其 key 的类型为 “word”,value 类型为函数指针,这个函数指针指向一个返回派生类临时对象的智能指针(autoPtr)。
在派生类里,每次调用 addToRunTimeSelectionTable 的时候,相当于往 hashTable 里添加一组元素。
在求解器里,创建的是基类的智能指针,这个指针指向基类中定义的 New 函数的返回值。New 的作用是选择具体的派生类,这里涉及到C++的一个特性,即基类指针可以指向派生类。New 函数根据你在算例里提供的模型的名字(typeName),去 hashTable 里匹配,然后将匹配到的派生类的对象返回。这样,就实现了模型的选择。