を持つクラステンプレート用ブラケットを回避私はその下に次のものと類似のクラステンプレートを持っているが、CSVファイルを解析するときに使用されるいくつかの構成設定を含むように設計されていますデフォルトパラメータ
今template <typename InputIterator = default_all>
class icsv_params
{
// Iterator to a data structure containing the columns
// that should be read.
typedef InputIterator iterator;
// This is a bitmask type.
typedef detail::icsv_op icsv_op;
static const icsv_op noqt = icsv_op(detail::csv_flags::noqt);
static const icsv_op quot = icsv_op(detail::csv_flags::quot);
static const icsv_op mmap = icsv_op(detail::csv_flags::mmap);
// The rest of the class definition isn't relevant.
};
、テンプレートパラメータでありますユーザが解析されるべき列の番号を含むデータ構造に開始および終了イテレータを供給したい場合に重要である。ただし、ユーザーがイテレータをパラメータとして指定しなければ、クラスは自動的にすべての列を解析する必要があります。第2のケースで
、クラスのインスタンスを宣言するためのコードは、扱いにくくなります。さらに
icsv_params<> params(...);
、ビットマスクタイプnoqt
、quot
、それは理にかなっているようmmap
は、唯一のこのクラスで使用されていますそれらをクラス定義の中に入れる。ユーザーが存在しないことを示すために、角括弧を提供する必要がないように
icsv_params<> params(icsv_params<>::noqt);
がどのように私はそれを行うことができます。ただし、ユーザーは、そうするためのコードも扱いにくいこれらのビットマスク型を使用したいはずですテンプレートパラメータ?そうする方法がない場合は、どのような選択肢を提案しますか?
関数テンプレートは、ブラケットを必要としません。 C++ 0xを仮定すると、ユーザコードは 'auto params = some_factory_function(...);'を実行できます。 –