// some arbitrary function
template<typename T>
void log(T&& obj)
{
std::cout << obj << std::endl;
}
// arbitrary transformation
template<typename T>
T convert(T&& obj) {
return obj;
}
template<template <typename> typename F, typename... T>
void callOn(F<T> func, /// issue: what's the type of func?
T&&... params)
{
func(std::forward<T>(convert(std::forward<T>(params)))...);
}
int main()
{
callOn(log, -1, -2.0);
return 0;
}
這可能嗎?解壓模板模板函數的可變參數?
編譯器抱怨:沒有匹配的函數調用'callOn(,..>)。爲什麼?
更新:假設日誌是不是一元函數
template<typename T>
void log(T&& value) { std::cout << value << std::endl; }
template<typename First, typename... Rest>
void log(First&& f, Rest&&... rest)
{
std::cout << f << ",";
log(std::forward<Rest>(rest)...);
}
卡隆需要鍵入「模板」不匹配的日誌類型?如何指定func的類型?
元元程序設計?我們必須更深入! – 2012-04-25 18:15:03
瘋狂猜測:你有沒有試過'模板 typename F'? –
Philipp
2012-04-25 18:26:55
@Philipp:這也是我的想法,但這個問題沒有多大意義,因爲'callOn(log,-1,-2.0);'會嘗試將兩個參數傳遞給'log',它是一元的。 – ildjarn 2012-04-25 18:32:04