Форум — Development C++ шаблоны 0 0 Можно ли определить оператор = для параметризованного класса без соответствующего объявления в объявлении класса? Ссылка
template<typename T> struct Foo { T field; }; template<typename T> bool operator==(const Foo<T>& lh, const Foo<T>& rh) { return lh.field == rh.field; } int main() { Foo<int> a; Foo<int> b; a.field = 10; b.field = 10; return a == b; } fghj ★★★★★ (19.04.08 17:24:14 MSK) Показать ответы Ссылка
Ответ на: комментарий от fghj 19.04.08 17:24:14 MSK Он вроде присваивание хотел. Legioner ★★★★★ (19.04.08 17:29:46 MSK) Ссылка
Ответ на: комментарий от fghj 19.04.08 17:24:14 MSK ок, а как оформить оператор, если он мне нужен только для T=double или другого конкретного типа? anonymous (19.04.08 17:39:00 MSK) Показать ответ Ссылка
Ответ на: комментарий от anonymous 19.04.08 17:39:00 MSK template<typename T> bool operator==(const Foo<T>& lh, const Foo<T>& rh) { return lh.field == rh.field; } bool operator==(const Foo<double>& lh, const Foo<double>& rh) { return fabs(lh.field - rh.field) < 1e-10; } fghj ★★★★★ (20.04.08 00:03:22 MSK) Показать ответ Ссылка
Ответ на: комментарий от fghj 20.04.08 00:03:22 MSK делаю вот так: template<typename T> Field<T>& operator=(Field<T>& a, Field<T>& b) { b.val = a.val; return b; } на такое определение компилятор пишет: error: ‘Field<T>& operator=(Field<T>&, Field<T>&)’ must be a nonstatic member function anonymous (20.04.08 11:33:44 MSK) Показать ответ Ссылка
Ответ на: комментарий от anonymous 20.04.08 11:33:44 MSK Присваивание, subscription[] и reference-> не могут быть перегружены кроме как члены класса. google: assignment non-member overloading dilmah ★★★★★ (20.04.08 14:11:26 MSK) Ссылка