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...>;
};
這不會工作,但我不明白爲什麼它不應該。它說,參數不抵扣的參數數量...和... Args2但對我來說應該是自然的,從調用現場猜:
typename ReplaceType<std::tuple<int, float, char>, float, double>>::type;
從那裏INT應該Args1 ......在模板專業化和字符Args2 ...
- 爲什麼這不起作用?
- 有沒有解決方法?
現在嘗試。爲什麼不能直接使用我所嘗試的?如果可能的話,我也想深入瞭解一下。無論如何,嘗試後,我很高興接受答覆,因爲它的工作原理。 –
因爲參數包[無法推導,除非包是最後一個模板參數](https://stackoverflow.com/questions/14768951/variadic-function-template-with-pack-expansion-not-in-last-parameter ),所以你的'std :: tuple'在燃燒的殘骸中墜落,因爲它試圖推導出一個不是最後一個模板參數的參數包。 –
Upvoting爲完成良好的工作實現和*在燃燒的殘骸*下降。不過,主要是因爲*燃燒的殘骸。 –