DomainFunctionalXD本质是一种数据处理器,是作用域函数类。用来对设计某个特别的域,并可以根据这个作用域函数类来对这个特别的域进行动态赋予。
1 定义
来看看DomainFunctional2D
:
1 | struct DomainFunctional2D { |
里面最关键的就是重载的运算符()
。operator重载了函数调用运算符()
。输入是iX
和iY
。这两个是cell的索引。根据cell的索引来决定返回的是true
还是false
。重载了()
之后,在调用构造函数DomainFunctional2D
时就可以实现重载后的功能。
关于重载运算符operator在对函数调用运算符()
的重载有一个例子,在[菜鸟教程里][https://www.runoob.com/cplusplus/function-call-operator-overloading.html]。
2 举例
来自文档)中的例子:
1 | template<typename T> |
上述定义了一个CylinderShapeDomain2D
的形域类。主要看看他的重载的函数调用运算符()
。
1 | return util::sqr(iX-cx) + util::sqr(iY-cy) <= radiussqr;< span> |
根据iX
和iY
来判断,cell其是否在圆内。如果是,则返回真,不然返回假。
根据这个CylinderShapeDomain2D
来设定动态对象:
1 | defineDynamics( lattice, lattice.getBoundingBox(), |
new CylinderShapeDomain2D
直接通过重载的运算符()
实现了对cell是否在圆内的判断。可以看到,在对圆内的单元defineDynamics时,使用起来非常简单。
根据DomainFunctionalXD
,我们可以很方便的自行设计域处理器。为选定的域来进行设定动态范围。