在模板中设置默认比较类型

时间:2015-03-28 15:04:51

标签: c++

我想在模板中将默认类类型设置为默认比较类型,然后我想使用模板比较两个字符串,我确实编写了代码,但它给出了错误。代码和错误如下,

class CaseSenCmp{
public:
     static int isEqual(char x, char y){        return x==y;    }
};

template<typename c=CaseSenCmp>
int compare(char* str1, char* str2){
  for(int i=0; i<strlen(str1) && i<strlen(str2); i++)
    if(!c::isEqual(str1[i], str2[i]))
        return str1[i]-str2[i];
  return strlen(str1)-strlen(str2); 
}

main(){
char *x = "hello", *y = "HELLO";
compare(x,y);   
}

但是当我添加了这个模板原型时,它可以正常工作

template<typename c>

编译器提供此错误

error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11|

此外,当我尝试使用此代码在main函数中进行类型转换时,它也可以正常工作

compare<CaseSenCmp>(x,y);

但我想设置默认策略

2 个答案:

答案 0 :(得分:0)

-std=c++11添加到编译标志中,因为它不会编译的另一种方式。

答案 1 :(得分:0)

我还在code :: blocks中遇到过这个问题。要解决此问题,您必须启用

-std=c++11

进入你的编译器。如果是code :: blocks,你必须按照下面的说明进行操作。

设置 - &gt;编译器 - &gt;编译器标志...查找并选中&#34;让g ++遵循C ++ 11 ISO C ++语言标准&#34;的选项。如果它没有得到它,那么也要检查它上面的框以获得C ++ 0x标准。