Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 函数专门化的问题_C++_Templates - Fatal编程技术网

C++ 函数专门化的问题

C++ 函数专门化的问题,c++,templates,C++,Templates,我必须对函数进行专门化,但参数较少 这是原始功能: template<typename T> bool isAfter(const T &x, const T &y) { if (x < y) { return true; } return false; } 模板 布尔·伊萨弗特(康斯特T&x、康斯特T&y){ if(x

我必须对函数进行专门化,但参数较少

这是原始功能:

template<typename T>
bool isAfter(const T &x, const T &y) {
    if (x < y) {
        return true;
    }
    return false;
}
模板
布尔·伊萨弗特(康斯特T&x、康斯特T&y){
if(x
这是我的尝试,但我会出错

template<> inline bool Templates::isAfter(std::vector<string> &vec) {

  for(int i=0; i<vec.size()-1; i++) {
    if(vec[i+1].size() < vec[i].size()) {
        return false;
    }

    return true;
  }
}
模板内联bool模板::isAfter(std::vector和vec){
对于(int i=0;i

模板
布尔·伊萨弗特(康斯特T&x、康斯特T&y){
if(x
专业化可以是

template<>
bool isAfter(const std::vector<std::string> &vec1, const std::vector<std::string> &vec2) { 
   return vec1.size() < vec2.size();
}
模板
bool isAfter(const std::vector&vec1,const std::vector&vec2){
返回vec1.size()
因为它跟在签名后面,T是
std::vector

但是在您的例子中只有一个参数,所以您不需要专门化,您可以定义一个具有相同名称的函数(重载),删除
template

附言

bool-isAfter(标准::向量和向量){
对于(int i=0;i 1)
返回(vec[1].size()>=vec[0].size());
/*缺少返回值*/
}
也许你想要

bool isAfter(std::vector<string> &vec) {
  for(int i=0; i<vec.size()-1; i++) {
    if(vec[i+1].size() < vec[i].size()) {
      return false;
    }
  }
  return true;
}
bool-isAfter(标准::向量和向量){

对于(inti=0;这不是专门化,只是重载而已。哦,谢谢。我还认为这一定是重载,而不是专门化。但在任务说明中,原始函数有两个参数,专门化函数必须只有向量,没有第二个参数,所以我们的教授写ins肯定犯了错误说明。无论如何,谢谢你,分享你的观点。
bool isAfter(std::vector<string> &vec) {
  for(int i=0; i<vec.size()-1; i++) {
    if(vec[i+1].size() < vec[i].size()) {
      return false;
    }
    return true;
  }
}
bool isAfter(std::vector<string> &vec) {
  if (vec.size() > 1)
    return (vec[1].size() >= vec[0].size());
  /* missing return value */
}
bool isAfter(std::vector<string> &vec) {
  for(int i=0; i<vec.size()-1; i++) {
    if(vec[i+1].size() < vec[i].size()) {
      return false;
    }
  }
  return true;
}