Forwarding Reference (以前はScott Meyers によってUniversal Referencesと呼ばれていました) のデフォルト引数を指定する方法を理解するのに苦労しています。
私がやりたいことをしようとしているコードの例を次に示します。
struct encoder_t {
} const encoder = {};
struct validator_t {
} const validator = {};
struct test {
template <typename Range, typename Encoding, typename Validation>
test ( Range&& range, Encoding&& encoding = encoder, Validation&& validation = validator ) {
}
};
int main() {
test( "woof" );
}
エラーを調べてみると、テンプレート引数をデフォルトに設定し、その後引数をデフォルト構築することで機能させることができることがわかりました。
// Works! But the syntax is strange... potential ramifications/deduction mishaps?
// Is this the "proper" way to default these arguments?
template <typename Range, typename Encoding = encoder_t, typename Validation = validator_t>
test ( Range&& range, Encoding&& encoding = Encoding(), Validation&& validation = Validation() ) {
}
これはこれを処理する「適切な」方法ですか?私が使用する構文は何ですか?「デフォルトの転送参照」の望ましい効果を得る方法は複数ありますか? これはどのように書けばよいのでしょうか?また、後でコードに大量の SFINAE を振りかけることになるので、複数のオーバーロードの記述を含まないものをはるかに好むことを覚えておいてください。