C ++模板的前向声明

时间:2018-05-01 05:50:22

标签: c++ templates

我想在课堂上添加一些朋友声明。例如,我想添加<add name="Results" virtualUrl="^~/(UK|USA)/sample-code/([^/]+)-my-code.html" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/my-pages/example.aspx?region=$1&amp;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一个好主意?

1 个答案:

答案 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) {
        // ...
    }

    // ...
};