簡體   English   中英

Functor到可變參數模板功能

[英]Functor to variadic template function

我想把仿函數變成functor,但是我得到了編譯錯誤。 這是代碼:

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仍然拒絕編譯,我認為這是一個bug。

您可以提供lambda函數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM