C++:如何强制模板化类型来实现某个运算符?
C++: How to enforce the templated type to implement a certain operator(s)?
9 年前 (C++11) 有一个 similar question ,也许更新的标准提供了这个。
我想确保我正在编写的模板化 class 只有在使用的类型实现某些运算符时才能实例化,例如 <
.
template <typename T>
class XX {
private:
T foo;
public:
bool continiumTransfunctioneer(const T zoo){return zoo < foo;}
// ...
};
我知道如果不满足该要求,代码将无法编译,但来自编译器的消息可能非常冗长 - 我希望能够预先警告用户。
这是使用 C++20 concepts 的一个很好的用例:
template <typename T>
requires requires (const T& x, const T& y) { x < y; }
class XX {
private:
T foo;
public:
bool continiumTransfunctioneer(const T& zoo) const { return zoo < foo; }
};
9 年前 (C++11) 有一个 similar question ,也许更新的标准提供了这个。
我想确保我正在编写的模板化 class 只有在使用的类型实现某些运算符时才能实例化,例如 <
.
template <typename T>
class XX {
private:
T foo;
public:
bool continiumTransfunctioneer(const T zoo){return zoo < foo;}
// ...
};
我知道如果不满足该要求,代码将无法编译,但来自编译器的消息可能非常冗长 - 我希望能够预先警告用户。
这是使用 C++20 concepts 的一个很好的用例:
template <typename T>
requires requires (const T& x, const T& y) { x < y; }
class XX {
private:
T foo;
public:
bool continiumTransfunctioneer(const T& zoo) const { return zoo < foo; }
};