diff options
author | Mike Buland <eichlan@xagasoft.com> | 2007-04-09 22:17:25 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2007-04-09 22:17:25 +0000 |
commit | 015b1ee8079175cace17917d375d24175311b2f8 (patch) | |
tree | 14ad9a8863957b28d18e7a8e6ba3611f70aee5bf /src | |
parent | 92312a5ab76a934f3e79896722d8ec46deffb233 (diff) | |
download | libbu++-015b1ee8079175cace17917d375d24175311b2f8.tar.gz libbu++-015b1ee8079175cace17917d375d24175311b2f8.tar.bz2 libbu++-015b1ee8079175cace17917d375d24175311b2f8.tar.xz libbu++-015b1ee8079175cace17917d375d24175311b2f8.zip |
The SPtr is castable now. just say SPtrCast<TypeToCastTo>( ASPtr );
Diffstat (limited to 'src')
-rw-r--r-- | src/sptr.h | 15 | ||||
-rw-r--r-- | src/tests/sptr.cpp | 5 |
2 files changed, 18 insertions, 2 deletions
@@ -4,9 +4,14 @@ | |||
4 | #include <stdint.h> | 4 | #include <stdint.h> |
5 | #include <stdio.h> | 5 | #include <stdio.h> |
6 | 6 | ||
7 | template<typename T> class SPtr; | ||
8 | template< typename Tb, typename Ta > SPtr<Tb> SPtrCast( SPtr<Ta> src ); | ||
9 | |||
7 | template<typename T> | 10 | template<typename T> |
8 | class SPtr | 11 | class SPtr |
9 | { | 12 | { |
13 | template<typename Tb, typename Ta> | ||
14 | friend SPtr<Tb> SPtrCast( SPtr<Ta> pt ); | ||
10 | public: | 15 | public: |
11 | SPtr() : | 16 | SPtr() : |
12 | pRefCnt( NULL ), | 17 | pRefCnt( NULL ), |
@@ -96,4 +101,14 @@ private: | |||
96 | T *pData; | 101 | T *pData; |
97 | }; | 102 | }; |
98 | 103 | ||
104 | template< typename Tb, typename Ta > SPtr<Tb> SPtrCast( SPtr<Ta> src ) | ||
105 | { | ||
106 | SPtr<Tb> ret; | ||
107 | ret.pRefCnt = src.pRefCnt; | ||
108 | ret.pData = dynamic_cast<Tb *>(src.pData); | ||
109 | if( ret.pRefCnt ) | ||
110 | (*(ret.pRefCnt)) += 1; | ||
111 | return ret; | ||
112 | } | ||
113 | |||
99 | #endif | 114 | #endif |
diff --git a/src/tests/sptr.cpp b/src/tests/sptr.cpp index bc00f78..252463b 100644 --- a/src/tests/sptr.cpp +++ b/src/tests/sptr.cpp | |||
@@ -65,11 +65,12 @@ int main() | |||
65 | beAnnoying( pt3 ); | 65 | beAnnoying( pt3 ); |
66 | 66 | ||
67 | { | 67 | { |
68 | SPtr<Annoy2> pt4( dynamic_cast<SPtr<Annoy2> >(pt3) ); | 68 | SPtr<Annoy2> pt4( SPtrCast<Annoy2>( pt3 ) ); |
69 | printf("Count: %d\n", pt4.count() ); | 69 | printf("Count: %d\n", pt4.count() ); |
70 | 70 | ||
71 | pt4.go2(); | 71 | pt4->go2(); |
72 | } | 72 | } |
73 | printf("Count: %d\n", pt.count() ); | ||
73 | } | 74 | } |
74 | printf("Count: %d\n", pt.count() ); | 75 | printf("Count: %d\n", pt.count() ); |
75 | } | 76 | } |