繰り返しを避けるためにテンプレートパラメータをまとめてバンドルする方法はありますか?C++でテンプレートパラメータを "バンドル"することはできますか?
私は、すべて同じ3つのテンプレートパラメータを使用するいくつかのクラスと関数を持っています。各クラス/関数を一度使用する関数を持つことは珍しいことではありません。結果として得られるコードは非常に厄介なものになります。 このコードを書くためのより簡潔な方法はありますか?
// ContextFactory is a pointer to functions that instantiate objects that are subtypes of MetricContext
template<typename VertexID, typename EdgeMembershipType, typename SetBitmap>
using ContextFactory = MetricContext <VertexID, EdgeMembershipType, SetBitmap> *(*)(const char *);
template<typename VertexID, typename EdgeMembershipType, typename SetBitmap>
static vector<ContextFactory<VertexID, EdgeMembershipType, SetBitmap>> buildCFList() {
vector<ContextFactory<VertexID, EdgeMembershipType, SetBitmap>> answer;
answer.push_back(MetricContext<VertexID, EdgeMembershipType, SetBitmap>::template make<NeoContext<VertexID, EdgeMembershipType, SetBitmap >>);
return answer;
};
この機能のほぼ半分が文字列<VertexID, EdgeMembershipType, SetBitmap>>
の繰り返しであるが、この文字列の各使用は、異なるクラスまたは関数に適用されますので、私は別名が動作するとは思わない注意してください。
(それが助け場合は、この機能の目的は、はい、これが可能であるMetricContext<VertexID, EdgeMembershipType, SetBitmap>>
を助け
希望を示しています。あなたは、しかし、いくつかの可読性を失う。 – AndyG
まず、戻り値として 'auto'を使うことができます。 – pSoLT
FWIW:戻り値の型を 'auto'(' static auto buildCFList() ')に置き換えたとき、私はこのエラーを後の戻り値の型なしで返す。推定される戻り値の型はC++ 14の拡張子 ' – Zack