【发布时间】:2011-10-25 09:07:21
【问题描述】:
所以我知道 C++ 有一个称为“模板模板参数”的功能,您可以在其中将类模板作为模板参数传递。例如:
template <typename T>
class vector { ... };
template <template <typename> class container> // this is a template template parameter
class foo { ... };
...
foo<vector> f; // pass the vector template itself as template parameter
函数模板有类似的东西吗? IE。有没有办法将函数模板(例如,std::make_pair)作为模板参数传递给类?
【问题讨论】:
-
你想使用什么神奇的语法?
-
@MSN:我想写一个函数
template <??? F> void foo(F),它可以被称为foo(bar),其中bar是一个函数模板(例如template <typename T> void bar(T))。然后foo可以使用各种类型的参数调用F。关于???中可能包含的内容,我将留给您的想象:) 如果bar是多态函数对象(即具有模板化运算符()的非模板类),则可以使用它, 在这种情况下foo的模板参数将是一个普通的类型参数。 [在下一条评论中继续] -
[接上一条评论] 但是,我想使用现有的函数模板
bar而不将其调整为多态函数对象。 -
类似
template <??? F> void foo(F f) { f(1, 2); f(3.0); }?不幸的是,您不能将一组函数重载称为单一类型或模板类型。 -
@MSN: 不,更像
template <??? F> void foo(F f) { f(Bar()); f(Moogah()); }我不需要???来引用一组函数重载,只是单个函数模板的一组实例化。 (即我将作为f传递的东西不会是具有Bar重载和Moogah重载的函数;它将是单个函数模板,然后foo将使用类型参数实例化Bar和Moogah.
标签: c++ templates template-templates function-template