1
私は多くの検索を行っていますが、多くの類似の質問がありますが、どれもこの特定の質問AFAIKを解決しません。タプル要素をタイプ別に置き換える部分的な特殊化を一致させる
タプルの型を(インデックスではなく)型で置き換えたいと思います。私はこのようなものを試しました:
template <class Tuple, class ToRemove, class ToReplace>
struct ReplaceType {
using type = Tuple;
};
template <class ToRemove, class ToReplace, class...Args, class...Args2>
struct ReplaceType<std::tuple<Args..., ToRemove, Args2...>, ToRemove, ToReplace> {
using type = std::tuple<Args..., ToReplace, Args2...>;
}
これは動作しませんが、なぜそれをしてはならないのか理解できません。それは...パラメータがArgsのための推論ではないことを言うとArgs2 ...しかし、私には、呼び出しサイトからそれを推測するのが自然でなければなりません:
typename ReplaceType<std::tuple<int, float, char>, float, double>>::type;
そこからintはArgs1する必要があります...でテンプレート特殊化とchar Args2 ...
- これはなぜ機能しませんか?
- 回避策はありますか?
今しようとしています。私が試したものを直接使うことができないのはなぜですか?可能であれば、それについてもいくつかの洞察を得たいと思います。とにかく、試した後、私はそれが機能するので、返信を受け入れることを嬉しく思っています –
パラメータパック[パックが最後のテンプレートパラメータでない限り推論できません](https://stackoverflow.com/questions/14768951/variadic-function-template-with-pack-expansion-not-in-last-parameter )ので、あなたの 'std :: tuple'は、最後のテンプレートパラメータではないパラメータパックを推測しようとしているので、残念なことに残骸に包まれます。 –
うまく実行された作業の実装をアップアップして、*燃える残骸*に落ちます。主に*燃える残骸*のため。 –