推导指针非类型模板参数的类型

时间:2020-06-21 21:32:13

标签: c++ templates c++14 non-type

我有一个函数,它接受指向任意对象(具有链接)的指针O作为非类型模板参数,例如:

Foo foo;

...

template <typename T, T* O>
ftype* make_function() {
    // do something with O
}

要将指针传递到类型为foo的{​​{1}}对象,我需要这样调用它:

Foo

但是,我想像make_function<Foo, &foo>() 那样简单地称呼它,即推断出指针的类型make_function<&foo>(),因为它可能采用类似的模式(例如,如果我传递了{ {1}}作为参数。

关于Godbolt的更多信息fleshed out example

1 个答案:

答案 0 :(得分:4)

C ++ 17允许

template <auto* O>
ftype* make_function() {
    // do something with O
}

在此之前,您确实需要

template <typename T, T* p>

宏可以帮助减少使用时的冗长程度:

#define AUTO(p) decltype(p), p

// ...

make_function<AUTO(&foo)>();