trurle: (lem)
[personal profile] trurle
C++ подобен морю.

В STL есть класс pair:
#include <utility>
#include <iostream>

using namespace std;

int main()
{
    pair<int, float> p;
    p.first = 3;
    p.second = 4.5;
    cout << p.first << "," << p.second << endl;
}
теперь попробуем у него унаследовать.
#include <utility>
#include <iostream>

using namespace std;

template<typename T> class range : public std::pair<T,T> {
public:
    range(T v) : std::pair<T,T>(v,v) {}
    bool in(T v) { return first <= v && v <= second; }
};
Компилируется? Нет, не компилируется в gcc 4.x, а как компилируется? Вот так:
#include <utility>
#include <iostream>

using namespace std;

template<typename T> class range : public std::pair<T,T> {
public:
    range(T v) : std::pair<T,T>(v,v) {}
    bool in(T v) { return std::pair<T,T>::first <= v && 
                          v <= std::pair<T,T>::second; }
};
Мне это кажется весьма примечательным

Re: и в чем шутка?

Date: 2011-03-10 11:09 am (UTC)
From: [identity profile] oblomov-jerusal.livejournal.com
У pair может быть явная специализация
template <> class pair
[Error: Irreparable invalid markup ('<foo,foo>') in entry. Owner must fix manually. Raw contents below.]

У pair может быть явная специализация<pre>
template <> class pair<Foo,Foo> {}</pre> без полей first и second и тогда компиляция range<Foo> повиснет в воздухе.

Profile

trurle: (Default)
trurle

January 2017

S M T W T F S
1234 5 6 7
89 101112 13 14
151617181920 21
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 20th, 2025 10:19 pm
Powered by Dreamwidth Studios