操作员的朋友特定模板实例化

时间:2016-05-15 09:01:37

标签: c++ friend

我有一个类模板和一个需要访问其私有字段的操作员模板。我可以成为模板朋友:

template <typename T>
class A {
    int x;
    template <typename U>
    friend bool operator==(const A<U>& a, const A<U>& b);
};

template <typename T>
bool operator== (const A<T>& a, const A<T>& b) {
    return a.x == b.x;
}

int main() {
    A<int> x, y;
    x == y;
    return 0;
}

但有可能只为operator==<T>成为A<T>朋友,而不是operator==<int>成为A<double>的朋友吗?

2 个答案:

答案 0 :(得分:6)

如果遇到submitButton.setOnAction(event -> submitData()); scene.setOnKeyPressed(keyEvent -> { if(keyEvent.getCode().equals(KeyCode.ENTER)) submitData(); }); 问题,请在定义friend类之前提前声明。

A

然后你可以template <typename T> bool operator== (const A<T>& a, const A<T>& b); 更清楚。完整解决方案(ideone):

friend

答案 1 :(得分:2)

是的,你可以。语法如下:

FROM gcr.io/tensorflow/tensorflow:latest
MAINTAINER Vincent Vanhoucke <vanhoucke@google.com>
RUN pip install scikit-learn
RUN rm -rf /notebooks/*
ADD *.ipynb /notebooks/
WORKDIR /notebooks
CMD ["/run_jupyter.sh"]

并将template <typename T> class A { int x; friend bool operator==<>(const A& a, const A& b); }; 定义(或仅仅是声明)放在operator==类之前。