【发布时间】:2020-01-03 07:51:08
【问题描述】:
#include <iostream>
template <typename... Ts> void Print(Ts... args) {
(std::cout << ... << args) << std::endl;
}
template <typename T> void Add(T a, T b) { Print(a + b); }
template <typename T> void Sub(T a, T b) { Print(a - b); }
template <typename T> void Mul(T a, T b) { Print(a * b); }
template <typename F, typename... Fns> void CallFuncs(F a, F b, Fns... fns) {
(fns(a, b), ...);
};
void FunctionInvokeTest() { CallFuncs(1, 2, Add<int>, Mul<int>); }
int main() {
FunctionInvokeTest();
return 0;
}
我想将模板函数作为参数传递,如上所示。该代码有效。但是我必须在Add<int>等函数之后加上<int>。
如果这是不可扣除的上下文,那么还有其他方法可以让我这样写,Add 和 Mul 仍然是模板函数?
CallFuncs(1,2, Add, Mul);
【问题讨论】:
标签: c++ templates template-argument-deduction