1
我試圖創建一個模板,它允許調用者指定自己的格式良好的分配方法,但我遇到了傳遞可變參數模板參數的問題。C++模板函數別名作爲可變參數模板參數
如果我不通過任何參數,一切都按預期工作;但是,如果我傳遞一個或多個參數,則會出現編譯錯誤「函數調用的參數太多」。
我在做什麼錯?
#include <cstdio>
#include <memory>
template <typename T, typename... Args>
using allocator = std::unique_ptr<T>(Args...);
template <typename T, allocator<T> A, typename... Args>
std::unique_ptr<T> get(Args... args) {
return A(args...);
}
int main() {
auto up1 = get<int, std::make_unique<int>>(); // Works
auto up2 = get<int, std::make_unique<int>>(1); // Too many arguments
// expected 0, have 1
printf("%d\n", *up1);
printf("%d\n", *up2);
}
[這](http://coliru.stacked-crooked.com/a/cd68dec6691d5323)_works_,但是這真的是你想要的界面..?這對我來說似乎是[XY問題](http://meta.stackexchange.com/a/66378/166663)。 – ildjarn
我可能會重構來更改界面,但我仍然對理解底層問題很感興趣。爲什麼可變參數在這種情況下不適用於模板別名? –
'allocator'是'allocator ,它是'std :: unique_ptr ()',然後調整爲'std :: unique_ptr (*)()'。 –