作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当类具有默认构造函数时,我可以使用 std::make_shared
的实例化,就像使用指向函数的指针 一样。这可能是因为实例化的模板必须编译并存储在内存中,并且它的地址必须存在。
#include <memory>
#include <functional>
class DefaultConstructible
{
};
typedef std::function<std::shared_ptr<DefaultConstructible>()> Generator;
int main()
{
Generator generator(std::make_shared<DefaultConstructible>);
std::shared_ptr<DefaultConstructible> defConst = generator();
return 0;
}
但是当我添加一个非平凡的构造函数时,同样的事情失败了:
#include <memory>
#include <functional>
class FromInt
{
public:
FromInt(int a):a_(a){}
int a_;
};
typedef std::function<std::shared_ptr<FromInt>(int)> Generator;
int main()
{
Generator generator(std::make_shared<FromInt>);
std::shared_ptr<FromInt> p = generator(2);
return 0;
}
我得到一个编译器错误:
error: no matching function for call to
'std::function<std::shared_ptr<FromInt>(int)>::function(<unresolved overloaded function type>)'
Generator g(std::make_shared<FromInt>);
^
为什么会这样,我怎样才能编译我的代码?
最佳答案
您只需要明确说明您希望它使用哪个构造函数:
Generator generator(std::make_shared<FromInt, int>);
“额外的”模板参数对应于构造函数参数。
关于c++ - 为什么我不能使用 std::make_shared 的实例化作为指向函数的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21675068/
我是一名优秀的程序员,十分优秀!