函数到可变模板函数

Functor to variadic template function

本文关键字:函数      更新时间:2023-10-16

我想把函子变成泛型函数,但我遇到了编译器错误。这是代码:

template <class T>
struct Creator
{
    template <typename...Ts>
    static std::shared_ptr<T> create(Ts&&... vs)
    {
        std::shared_ptr<T> t(new T(std::forward<Ts>(vs)...));
        return t;
    }
};
class Car:
        public Creator<Car>
{
    private:
        friend class Creator<Car>;
        Car()
        {
        }
};
int main()
{
    auto car=Car::create();
    std::function< std::shared_ptr<Car> () > createFn=&Car::create;
    return 0;
}

我在GCC 4.6.3中的第二条语句中得到以下错误(第一条是OK):

error: conversion from ‘<unresolved overloaded function type>’
       to non-scalar type ‘std::function<std::shared_ptr<Car>()>’ requested

感谢任何提示。

如果需要模板函数的指针,则必须首先实例化模板。

std::function<std::shared_ptr<Car>()> createFn = &Car::create<>;

这将使它在clang++3.1上编译,但g++4.8仍然拒绝编译,我认为这是一个错误。

您可以提供lambda函数:

std::function<std::shared_ptr<Car>()> createFn = []{ return Car::create(); };