我想在课堂上添加一些朋友声明。例如,我想添加<add name="Results"
virtualUrl="^~/(UK|USA)/sample-code/([^/]+)-my-code.html"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/my-pages/example.aspx?region=$1&location=$2"
redirectMode="Permanent" ignoreCase="true" />
,operator==
的一些功能。所以我要做的是使用前向声明:
operator <
令人讨厌的是,我必须使用template <typename >
class MyBlob;
template <typename T>
bool operator==(const MyBlob<T> &, const MyBlob<T>&);
template <typename T>
bool operator!=(const MyBlob<T> &, const MyBlob<T>&);
template <typename T>
bool operator<(const MyBlob<T> &, const MyBlob<T>&);
template <typename T>
class MyBlob
{
friend bool operator== <T>(const MyBlob<T> &lhs,const MyBlob<T> &rhs);
friend bool operator!= <T>(const MyBlob<T> &lhs,const MyBlob<T> &rhs);
friend bool operator< <T>(const MyBlob<T> &lhs,const MyBlob<T> &rhs);
//other things
};
三次。这确实降低了可读性。
那么,有没有什么方法可以使前向声明更简单?或者我可以用一些方法在普通函数中将这些东西声明在一个地方吗?
如果无法做到这一点,是否正在使用template <typename T>
来简化typedef
一个好主意?
答案 0 :(得分:1)
您可以尝试在类声明中定义友元运算符:
template <typename T>
class MyBlob {
friend bool operator== (const MyBlob& lhs, const MyBlob& rhs) {
// ...
}
friend bool operator!= (const MyBlob& lhs, const MyBlob& rhs) {
// ...
}
friend bool operator< (const MyBlob& lhs, const MyBlob& rhs) {
// ...
}
// ...
};