我想使泛函函數,但我得到編譯器錯誤。 下面是代碼:函子到variadic模板函數
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
任何暗示讚賞。
@NicolBolas:固定的感謝。 – 2012-03-29 09:07:09
在我看來,你正試圖複製'std :: make_shared'。是對的嗎? – 2012-03-29 10:04:37
@TamásSzelei:這只是我實際應用中的蒸餾例子。此代碼將成爲對象工廠的一部分,它將根據提供的密鑰返回基本類型的智能指針。下面的答案是我想看到的。 – 2012-03-29 12:02:40