C++ C++;操作员的模板不匹配<;
我见过类似的问题,但还没有找到解决我问题的方法,所以我希望能得到一些帮助 我想将一个类作为参数传递给一个带有模板参数的函数(在本例中,我只想对它进行编译,这样nvm就不会对操作符中的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; }
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;
}