通常,我将保留如下函数参数:
template<typename T>
struct foo {
using type = T;
};
我知道它不会是using
,但是我可以通过哪种方式保留作为模板参数传递的函数?
template<void (*T)(const int)>
struct bar {
static T& type = T;
};
我知道这是行不通的,我只想知道如何才能保留该函数指针。
答案 0 :(得分:4)
您可以使用decltype
来声明人们可以引用的T
类型的成员变量
template<void (*T)(const int)>
struct bar {
static constexpr decltype(T) value = T;
};
您可以更进一步,使T
的类型成为成员,就像
template<void (*T)(const int)>
struct bar {
using fptr = decltype(T)
static constexpr fptr value = T;
};
答案 1 :(得分:2)
当这样使用时:
template<void (*T)(const int)>
struct bar {
static T& type = T;
};
T是一个非类型的模板参数,没有要保留的类型(我也建议使用其他名称,因为T通常是指类型)
例如,您可以将指针本身用作结构的成员
static constexpr int (*func_ptr)(int) = T;