【发布时间】:2012-03-29 08:34:38
【问题描述】:
我想将仿函数制作成泛型函数,但出现编译器错误。 代码如下:
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 中的第二个语句(第一个是可以的)中收到以下错误:
error: conversion from ‘<unresolved overloaded function type>’
to non-scalar type ‘std::function<std::shared_ptr<Car>()>’ requested
任何提示表示赞赏。
【问题讨论】:
-
在我看来,您正在尝试复制
std::make_shared。对吗? -
@TamásSzelei:这只是从我的真实应用中提炼出来的例子。此代码将成为对象工厂的一部分,它将根据提供的键返回基本类型的智能指针。下面的答案是我想看到的。
标签: c++ templates c++11 template-meta-programming