On Friday, 31 December 2021 at 09:01:10 UTC, data pulverizer wrote:
> 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 arguments?
> 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
};