保留功能指针模板参数

时间:2018-10-12 20:01:48

标签: c++ templates parameters function-pointers using

通常,我将保留如下函数参数:

template<typename T>
struct foo {
    using type = T;
};

我知道它不会是using,但是我可以通过哪种方式保留作为模板参数传递的函数?

template<void (*T)(const int)>
struct bar {
    static T& type = T;
};

我知道这是行不通的,我只想知道如何才能保留该函数指针。

2 个答案:

答案 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;