例如
template<class T, class U>
void f();
template<class T> using g = f<T, int>;
或任何类似的功能想法?
答案 0 :(得分:9)
没有。你不能这样做。您需要创建一个调用f
的新函数,转发所有参数和模板参数。
template<class T, class U>
void f();
template<class T>
void g() {
f<T, int>();
}
C ++ 14替代方案是函数指针类型的变量模板:
template<typename T>
void (*g)() = &f<T, int>;
虽然这种方法忽略了默认参数,但也可能有其他怪癖。 我强烈推荐更详细的包装方法。
答案 1 :(得分:2)
不,您可以不这样做,因为模板化别名用于创建类型的别名,而不是具体数据。
您要做的是从函数的地址创建一个别名/类型,因为f<T, int>
会衰减为指向函数的指针。
但是,您可以从函数f
的类型创建模板化别名。
template <typename T>
using g = typename std::add_pointer<decltype(f<T, int>)>::type;
int main() {
// Type of 'func' is 'void (*)()' with template arguments '{T1=double, T2=int}'.
g<double> func;
func = f<double, int>; // Point to function with same signature and template args.
func(); // Ok to call function.
}