推断指针非类型模板参数的类型
Posted
技术标签:
【中文标题】推断指针非类型模板参数的类型【英文标题】:Deducing the type of a pointer non-type template parameter 【发布时间】:2020-06-21 21:32:13 【问题描述】:我有一个函数,它接受一个指向任意对象(带有链接)的指针O
作为非类型模板参数,如下所示:
Foo foo;
...
template <typename T, T* O>
ftype* make_function()
// do something with O
要将指针传递给Foo
类型的foo
对象,我需要这样调用它:
make_function<Foo, &foo>()
但是,我想简单地将其称为 make_function<&foo>()
,即推断出指针的类型 Foo
,因为它可能具有相似的模式(例如,如果我将 foo
作为论据)。
这是关于 Godbolt 的更多 fleshed out example。
【问题讨论】:
【参考方案1】: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)>();
【讨论】:
是的,我目前正在使用与宏解决方案类似的东西,我应该说“非宏”。不幸的是,我的目标是 c++14。 @BeeOnRope:您需要您无权访问的版本的功能。因此,您受限于旧语法或可用的解决方法(例如 MACRO)。 好的,谢谢。如果其他人有聪明的解决方案,我会暂时打开它。以上是关于推断指针非类型模板参数的类型的主要内容,如果未能解决你的问题,请参考以下文章