function(pointer) as template argument, explicit template instantiation

kdevel kdevel at
Fri Dec 31 11:52:21 UTC 2021

On Friday, 31 December 2021 at 09:01:10 UTC, data pulverizer 
> On Friday, 31 December 2021 at 00:57:26 UTC, kdevel wrote:
> Pointers are runtime entities and are not suitable template 
> parameters (compile time).

The address of a function does not change at runtime. The 
question is: Can functions (pointers) be used as template 

> So assuming that you are trying to either pass a function 
> constant of a specific type signature as a template argument,

That is what I want to do. The function template lyr shall be 
(explicitly) instantiated in order to put the resulting function 
pointer into an AA. The call signature of lyr!(foo) and foo must 
be the same.

In C++ this looks like this:

struct R {

// typedef void (* Fn) (R &); // ptr version
typedef void (& Fn) (R &);

template<Fn f>
static void lyr (R &r)
    // invoke f

static void foo (R &r)

/* ptr version
static const std::map<std::string, Fn> reg = {
    {"foo", &foo},
    {"lfoo", &lyr<foo>}         // <--- func tmpl instantiation

static const std::map<std::string, Fn> reg = {
    {"foo", foo},
    {"lfoo", lyr<foo>}         // <--- func tmpl instantiation

More information about the Digitalmars-d-learn mailing list