почему перегрузка оператора шаблона не работает? - PullRequest
1 голос
/ 26 января 2012

Почему этот код не печатает "operator ="?

#include <iostream>
using namespace std;

class A{
public:
    template<typename T> void operator=(const T& other){
        cout<<"operator="<<endl;
    }
};

int main(){
    A a;
    A b;
    a=b;
}

1 Ответ

7 голосов
/ 26 января 2012

Оператор присвоения копии, сгенерированный компилятором, выбирается по разрешению перегрузки:

class A{
public:
  A& operator=(A const& other){
    std::cout << "copy assignment\n";
    return *this;
  }
  template<class T>
  void operator=(T const& other){
    std::cout << "templated assignment\n";
  }
};

Будет печатать «назначение копирования» и по существу будет равен тому, что сгенерирует для вас компилятор (без печати, конечно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...