Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/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++;操作员的模板不匹配<;_C++_Templates_Operators_Operator Keyword - Fatal编程技术网

C++ C++;操作员的模板不匹配<;

C++ C++;操作员的模板不匹配<;,c++,templates,operators,operator-keyword,C++,Templates,Operators,Operator Keyword,我见过类似的问题,但还没有找到解决我问题的方法,所以我希望能得到一些帮助 我想将一个类作为参数传递给一个带有模板参数的函数(在本例中,我只想对它进行编译,这样nvm就不会对操作符中的return true有任何意义)。我认为以下代码中的这种方式会起作用: template<typename T> class MyClass { public: bool operator>(const T&) const { return true; }

我见过类似的问题,但还没有找到解决我问题的方法,所以我希望能得到一些帮助

我想将一个类作为参数传递给一个带有模板参数的函数(在本例中,我只想对它进行编译,这样nvm就不会对操作符中的
return true
有任何意义)。我认为以下代码中的这种方式会起作用:

template<typename T>
class MyClass {
public:
    bool operator>(const T&) const { 
        return true;
    }  

    bool operator<(const T&) const { 
        return true;
    }
};

template<typename T, typename S> 
vector<T> between_interval(T* start, T* end, const S& low, const S& high){
    vector<T> vec;
    for ( ; start != end; start++) {
        if (low < *start && *start < high)
            vec.push_back(* start);
    }
    return vec;
}

int main() {
    double v1[] = {1.23, 4.56, 7.89, -10, 4};
    MyClass<double> k1;
    MyClass<double> k2;
    vector<double> res = between_interval(v1, v1 + 3, k1, k2);
    for (auto x : res)
        cout << x << " ";
        cout << endl;
    } 
模板
类MyClass{
公众:
布尔运算符>(常数T&)常数{
返回true;
}  
bool算子

模板
类MyClass{
公众:
布尔运算符>(常数T&)常数{
返回true;
}  
布尔运算符d
但你知道

  • d
    (使用
    *启动
您也必须实现该运算符,或者更改代码以使用提供的运算符。

使用

template<typename T>
class MyClass {
public:
    bool operator>(const T&) const { 
        return true;
    }  

    bool operator<(const T&) const { 
        return true;
    }
};
模板
类MyClass{
公众:
布尔运算符>(常数T&)常数{
返回true;
}  
布尔运算符d
但你知道

  • d
    (使用
    *启动

您还必须实现该运算符,或者更改代码以使用提供的运算符。

成员运算符始终将左操作数用作此
,将右操作数用作运算符参数。这意味着您的比较运算符仅在比较的左侧为MyClass时才起作用。快速修复方法是使用c将行
if(低<*启动和高<启动)更改为
if(低<*启动和高>*启动)
MyClass
实例放在每次比较的左侧。更干净的解决方案是提供免费的操作符,在左侧取
T
,在右侧取
MyClass
。例如:

template<typename T>
bool operator>(const T& p_left, const MyClass<T> & p_right) {
    return p_right < p_left;
}

template<typename T>
bool operator<(const T& p_left, const MyClass<T> & p_right) {
    return p_right > p_left;
}
模板
布尔运算符>(常数T&p_左,常数MyClass&p_右){
返回p_right
成员运算符始终将左操作数用作
this
,将右操作数用作运算符参数。这意味着您的比较运算符仅在
MyClass
位于比较的左侧时才起作用。快速解决方法是将行
if(低启动和启动<高)
更改为
if(低启动和高启动)
MyClass
实例放在每个比较的左侧。更干净的解决方案是提供免费的操作员,他们在左侧取
T
,在右侧取
MyClass
。例如:

template<typename T>
bool operator>(const T& p_left, const MyClass<T> & p_right) {
    return p_right < p_left;
}

template<typename T>
bool operator<(const T& p_left, const MyClass<T> & p_right) {
    return p_right > p_left;
}
模板
布尔运算符>(常数T&p_左,常数MyClass&p_右){
返回p_right
因为您的
操作员因为您的
操作员
template<typename T>
bool operator>(const T& p_left, const MyClass<T> & p_right) {
    return p_right < p_left;
}

template<typename T>
bool operator<(const T& p_left, const MyClass<T> & p_right) {
    return p_right > p_left;
}