1
當我想將可變參數模板參數包分爲兩部分時,我遇到了這個問題,第一部分包含除最後一部分以外的所有元素,第二部分僅包含最後一部分。一個簡單的實現,它來到我的腦海,在下面的例子中invoke1
功能:Variadic模板類型扣除
template <typename... Ts>
void invoke1(Ts... ts, int param) {
}
template <typename... Ts>
void invoke2(int param, Ts... ts) {
}
int main() {
invoke1(1); // this works
invoke2(1); // this works
invoke1(1, 2, 3); // this does not work
invoke1<int, int>(1, 2, 3); // this works
invoke2(1, 2, 3); // this works
return 0;
}
爲什麼當第一次指定的模板參數包模板參數不推導出invoke1
?類型扣除會產生歧義嗎?
>現在,你會說:「不能只取最後一個給定的參數,並在它之前結束參數包?」。那麼,答案是否定的。 爲什麼不回答?這是我的主要問題。 – Jodebo
@Jodebo因爲這是功能如何指定和標準化。 – DeiDei
但恕我直言標準很多事情是由那它就可以工作「的方式。我的問題是,爲什麼編譯器不能推斷模板參數?什麼是反對它的原因?它會在類型扣除等方面造成含糊之處嗎?還是僅僅是語言缺陷,沒有人提交論文? – Jodebo