【问题标题】:Is there such a thing as a function template template parameter?有没有函数模板模板参数之类的东西?
【发布时间】: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 &lt;??? F&gt; void foo(F),它可以被称为foo(bar),其中bar是一个函数模板(例如template &lt;typename T&gt; void bar(T))。然后foo 可以使用各种类型的参数调用F。关于??? 中可能包含的内容,我将留给您的想象:) 如果bar 是多态函数对象(即具有模板化运算符()的非模板类),则可以使用它, 在这种情况下foo 的模板参数将是一个普通的类型参数。 [在下一条评论中继续]
  • [接上一条评论] 但是,我想使用现有的函数模板 bar 而不将其调整为多态函数对象。
  • 类似template &lt;??? F&gt; void foo(F f) { f(1, 2); f(3.0); }?不幸的是,您不能将一组函数重载称为单一类型或模板类型。
  • @MSN: 不,更像template &lt;??? F&gt; void foo(F f) { f(Bar()); f(Moogah()); } 我不需要??? 来引用一组函数重载,只是单个函数模板的一组实例化。 (即我将作为f 传递的东西不会是具有Bar 重载和Moogah 重载的函数;它将是单个函数模板,然后foo 将使用类型参数实例化BarMoogah.

标签: c++ templates template-templates function-template


【解决方案1】:

没有。

【讨论】:

  • @HighCommander4:你可以使用类模板和调用静态成员函数。
  • @Alexandre C.:我想做的是获取一些其他人编写的函数模板,并将它们调整为多态函数对象(无需为每个函数模板声明一个单独的类我'米适应)。我认为没有函数模板模板参数是不可能的......
  • @HighCommander4:你为什么不使用boost::function(或C++0x std::function/std::tr1::function)?他们提供的类型擦除应该能让你摆脱困境。
  • @Alexandre。 C:那我会放什么std::function&lt; --HERE-- &gt;
  • @Alexandre。 C:我把这个讨论带到它自己的问题上:stackoverflow.com/questions/7033645/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 2018-12-16
  • 2016-11-07
  • 1970-01-01
  • 2015-04-26
  • 1970-01-01
相关资源
最近更新 更多