regex_match
テンプレートを独自のメモリSTLアロケータで使用する方法が固まっています。std :: regex_match with another Allocator
これは私のコードです:std::match
とstd::string
については
FaF::smatch stringResults;
std::regex expression("expression");
std::regex_match(FaF::string-variable, stringResults, expression);
私が成功したので、私は上記の例では、それを使用します。
namespace FaF
{
using smatch = std::match_results<std::string::const_iterator,
Allocator<std::string::const_iterator>>;
using string = std::basic_string<char, std::char_traits<char>, Allocator<char>>;
}
私のアロケータは、いくつかのログを持って、私ははっきりと見ることができますはい、実際に使用されています。 cppreferenceを正しく理解すると、std::regex
にはアロケータがありませんが、std::regex_match
doesです。
私の質問:
定義する方法 - 上記のタイプに従って - namespace FaF
で私のSTLのメモリアロケータを使用しているstd::regex_match
に基づいて追加のテンプレートを?
あなたは自分がどのような問題を抱えているのか分かりません。 'std :: regex_match'は、「テンプレート引数の減算」と呼ばれる魔法を使って、第1引数と第2引数から自動的に割り当て子を取り出します。これはあなたが望むものではありませんか?あなたが必要と感じる追加的な定義は何ですか?またその理由は何ですか? –
ちなみに、 'std :: match_results'は、あなたのtypedefが信じるように、 'Iter'だけでなく、' std :: sub_match 'のインスタンスを割り当てるためにそのアロケータを使います。 –
@IgorTandetnik 1)私は既にIter項目も拡張しなければならないと思っていました。 2) 'std :: regex_match'が同じアロケータを使用しているとは思わない。私のログには5回呼び出され、' stringResults'には5つの項目があることがわかっているからだ。私はそれも4に変更し、ログは4割り当てを表示しました。したがって私はこの質問をしました。なぜなら、私にとっては、「テンプレート引数の控除」がないことは明らかです。 –