Our DMS Software Reengineering Toolkit with its C++14 front end can be used to do this.
DMS is a general purpose program analysis and transformation tool based on compiler technology. It parses source code based on the front end it is using, to compiler data structures such as ASTs stampled with source location information, symbol tables and control flow graphs. It provides a variety of libraries and DSLs for specifying actions over those compiler data structures, including walking ASTs, pattern matching over ASTs using surface syntax patterns, modifying the ASTs, and finally prettyprinting any modified code back to compilable source form with comments.
To handle OP's task, one would configure DMS to "just" parse the source code (you can skip name resolution and flow analysis for this task) to build ASTs for the files of interest. Then using the line numbers, one could walk the AST looking for nodes that match the line numbers, pick out the function subtree corresponding to the node, and prettyprint just those subtrees to see the entire function definition, or prettyprint just the function signature. Voila.
An alternative approach would parse the files and then do name resolution. Traversing the symbol table is easy and provides access to the function signature, and location by virtue of references to the function's AST.
In either case, rather than just printing function names/signatures/bodies, one could use DMS to implement the static analyses of choice.
DMS has been in use analyzing and transforming large C++ code bases for over a decade.
I'm the author, so don't consider this as a recommendation. I'm documenting its existence as a solution.