繁体   English   中英

保留功能指针模板参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM