enum class -> class
std::function -> function pointer