さて、関数内で作成されるクラスのインスタンスへのポインターを返す必要があります。これは適切ですか?
これはサンプルコードです:
template <typename T>
ImplicatedMembershipFunction<T>*
TriangularMF<T>::minImplicate(const T &constantSet) const
{
static ImplicatedType* resultingSet = new ImplicatedType();
// do something to generate resultingSet...
return resultingSet;
}
コンテナーに基本クラスのサブクラスが必要なため、ポインターを返したい。上記のコードでは、 で定義され、 から派生しImplicatedType
たクラスです。から派生したネストされたクラスを持つようなさまざまなテンプレート クラスがあり、それらを同じように扱う必要があります。たとえば、図書館の外では、次のようなことをしたいかもしれません:TriangularMF<T>
ImplicatedMembershipFunction<T>
TriangularMF
ImplicatedMembershipFunction<T>
TriangularMF<double> trmf(0,1,2);
TrapesoidalMF<double> trpmf(0,1,3,2); // a class like TriangularMF but
// ImplicatedType is different
ImplicatedMembershipFunction<double>* itrmf = trmf.implicate(0.6);
ImplicatedMembershipFunction<double>* itrpmf = trpmf.implicate(0.6); // same as above.
// use them in the same way:
vector<ImplicatedMembershipFunction<double>*> vec;
vec.push_back(itrmf);
vec.push_back(itrpmf);
移動セマンティクスのような C++11 機能を使用したくない理由、またはstd::shared_ptr
チームメイトに g++ の新しいバージョンをコンピューターに強制的にインストールさせたくないという理由があります。ライブラリのコンパイル済みバージョンを提供することはできません。
編集
ライブラリはスレッド化されます。特に、 はTriangularMF<T>::minImplicate
同時に複数のスレッドで実行されます。したがって、minImplicate
相互タスクを作成しても、パフォーマンスには意味がありません。