返回对函数模板的引用

Returning reference to a function template

本文关键字:引用 函数模板 返回      更新时间:2023-10-16

我有一个名为Managed的模板类,它具有静态模板化create()函数。我正在尝试编写一个帮助程序,它在传递托管子类类型时返回该函数。

typedef std::function<ScreenBase::ptr (WindowBase&)> ScreenFactory;
template<typename T>
ScreenFactory screen_factory() {
    ScreenFactory ret = &T::create<WindowBase&>;
    return ret;
}

由于 create 本身需要模板参数,因此我显式尝试获取对采用 WindowBase& 的实例化的引用。据我所知,上面的代码应该可以工作。

但是,当我尝试调用它时,出现以下错误:

error: expected '(' for function-style cast or type construction
ScreenFactory ret = &T::create<WindowBase&>;
                               ~~~~~~~~~~^

不确定我做错了什么,有什么指示吗?

您缺少一个template关键字:

template<typename T>
ScreenFactory screen_factory() {
    ScreenFactory ret = &T::template create<WindowBase&>;
    //                      ~~~~~~~^
    return ret;
}

有关详细信息,请参阅我必须在哪里以及为什么必须放置"模板"和"类型名称"关键字?