@norihiro-w do we expect to have vectors of tasks like:
```c++
std::vector<ITask<MESH_ITEM_T>*> tasks;
std::for_each(tasks.begin(), tasks.end(), doSomethingWithTask);
```

I'd like to substitute dynamic polymorphism here with static polymorphism using templates like
```c++
template<typename MESH_ITEM_T, template <class> class TASK_T>
double sumTaskResult(TASK_T<MESH_ITEM_T>& t, std::vector<MESH_ITEM_T*>& ms)
{
   return std::accumulate(ms.begin(), ms.end(), 0, t);
}
```
such that `LinearAssembler` is not longer derived from `ITask<MESH_ITEM_T>`.