我有一个函数,它接受指向任意对象(具有链接)的指针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。
答案 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)>();