[英]Preserving Function Pointer Template Arguments
通常,我会保留如下函数参数:
template<typename T>
struct foo {
using type = T;
};
我知道它不会被using
但是我可以using
什么方式保留作为模板参数传递的函数呢?
template<void (*T)(const int)> struct bar { static T& type = T; };
我知道这是行不通的,我只想知道如何才能保留该函数指针。
您可以使用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;
};
当这样使用时:
template<void (*T)(const int)>
struct bar {
static T& type = T;
};
T是一个非类型的模板参数,并且没有要保留的类型(我也建议使用其他名称,因为T通常是指类型)
您可以使指针本身作为结构的成员可用,例如
static constexpr int (*func_ptr)(int) = T;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.