ファンクタを汎用関数にしたいが、コンパイラエラーが出る。可変関数テンプレート関数
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;
}
私は2番目の文でGCC 4.6.3で次のエラーを取得する(最初はOKです):どれでもヒントは感謝
error: conversion from ‘<unresolved overloaded function type>’
to non-scalar type ‘std::function<std::shared_ptr<Car>()>’ requested
はここのコードです。
@NicolBolas:固定おかげ。 –
'std :: make_shared'を複製しようとしているようです。そうですか? –
@TamásSzelei:これは私の実際のアプリケーションから抜粋した例です。このコードはオブジェクトファクトリの一部であり、提供されたキーに基づいて基本型のスマートポインタを返します。以下の答えは、私が見たいと思ったものです。 –