【问题标题】:Template parameter modifier模板参数修饰符
【发布时间】:2013-04-13 20:19:08
【问题描述】:

我有一个与模板有关的问题。

template <typename A, typename B>
void someFunction (A* array, const B& numEl);

我希望 numEl (-->numberOfElements) 是无符号的,但 const unsigned 不会编译。数组中的元素数量绝不是负数,我将始终使用 long、int 或 short,因此我可以使用 numEl unsigned

【问题讨论】:

  • "numEl (-->numberOfElements)" 为什么不直接...在代码中写出全名?如果非要在这里解释,就直接用代码解释。您的编译器会很好地处理名称。你需要定义“不会编译”。

标签: c++ templates parameters modifier


【解决方案1】:

如果您只希望用户使用无符号类型调用您的函数,您可以使用如下内容:

template<typename A, typename B, typename = typename std::enable_if<std::is_unsigned<B>::value>::type>
void someFunction(A * array, B numEl) {
    // do something
}

还请注意,由于您正在处理 B 的整数类型,因此无需接受 numEl 作为 const 引用。

POC on ideone

【讨论】:

  • 它需要成为一个常量引用。 const- 因为我不对其进行修改,所以引用- 以避免浪费时间来复制传递的变量。非常感谢你!老实说,我不知道这东西是如何工作的。你能推荐一个网页或一本书来学习吗?我想我可以用一本书来描述 C++ 中可用的一些高级特性/技术。有很多关于基础知识的书籍,但没有找到任何关于高级甚至中级的东西,比如使用 typedef 和模板、特征(不知道它是什么,因为我没有找到任何资源)。
猜你喜欢
  • 2021-01-05
  • 2012-12-06
  • 2014-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 2015-10-04
相关资源
最近更新 更多