0

次のように、コンストラクターで指定されたファンクターを基本的に格納する必要があるクラスがあります。

template <class T>
class Foo {
   private:
     T func;
   public:
     Foo(T f) : func(f) { }
}

ただし、Foo クラスの新しいインスタンスを作成するには、これを行うことができないようです。

Foo foo(std::less<int>());

T はクラス テンプレート パラメータであるためです。代わりに、この不格好な構文を使用する必要があります。

Foo<std::less<int>> foo(std::less<int>());

ファンクターの型を 2 回書かずに、これを行うより良い方法はありますか?

4

2 に答える 2

2

Foo関数を使用してファンクターの型を推測し、正しいフレーバーを返すことができます。

template <typename T>
Foo<T> make_foo(T t) { return Foo<T>(t); }

ただし、このソリューションは基本的にauto、戻り値を格納するために C++11 から必要です。

auto f = make_foo(std::less<int>());
于 2013-08-15T08:14:33.127 に答える