【问题标题】: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&lt;&amp;foo&gt;(),即推断出指针的类型 Foo,因为它可能具有相似的模式(例如,如果我将 foo 作为论据)。

这是关于 Godbolt 的更多 fleshed out example

【问题讨论】:

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


    【解决方案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)。
    • 好的,谢谢。如果其他人有聪明的解决方案,我会暂时打开它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    相关资源
    最近更新 更多