Skip to content

Commit 8c8b0e0

Browse files
author
Roman Donchenko
committed
Refactor any to not use any const_casts
Consider this a followup to flann-lib#115. There's no need to use const_cast, since it's very easy to make it work in a const-correct manner.
1 parent b281273 commit 8c8b0e0

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

src/cpp/flann/util/any.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ struct base_any_policy
4444
virtual void clone(void* const* src, void** dest) = 0;
4545
virtual void move(void* const* src, void** dest) = 0;
4646
virtual void* get_value(void** src) = 0;
47-
virtual void* get_value(void* const * src) = 0;
47+
virtual const void* get_value(void* const * src) = 0;
4848
virtual ::size_t get_size() = 0;
4949
virtual const std::type_info& type() = 0;
5050
virtual void print(std::ostream& out, void* const* src) = 0;
@@ -69,7 +69,7 @@ struct small_any_policy : typed_base_any_policy<T>
6969
virtual void clone(void* const* src, void** dest) { *dest = *src; }
7070
virtual void move(void* const* src, void** dest) { *dest = *src; }
7171
virtual void* get_value(void** src) { return reinterpret_cast<void*>(src); }
72-
virtual void* get_value(void* const * src) { return const_cast<void *>( reinterpret_cast<const void*>(src) ); }
72+
virtual const void* get_value(void* const * src) { return reinterpret_cast<const void*>(src); }
7373
virtual void print(std::ostream& out, void* const* src) { out << *reinterpret_cast<T const*>(src); }
7474
};
7575

@@ -94,7 +94,7 @@ struct big_any_policy : typed_base_any_policy<T>
9494
**reinterpret_cast<T**>(dest) = **reinterpret_cast<T* const*>(src);
9595
}
9696
virtual void* get_value(void** src) { return *src; }
97-
virtual void* get_value(void* const * src) { return const_cast<void*>(*src); }
97+
virtual const void* get_value(void* const * src) { return *src; }
9898
virtual void print(std::ostream& out, void* const* src) { out << *reinterpret_cast<T const*>(*src); }
9999
};
100100

@@ -245,7 +245,7 @@ class any
245245
const T& cast() const
246246
{
247247
if (policy->type() != typeid(T)) throw anyimpl::bad_any_cast();
248-
T* r = reinterpret_cast<T*>(policy->get_value(&object));
248+
const T* r = reinterpret_cast<const T*>(policy->get_value(&object));
249249
return *r;
250250
}
251251

0 commit comments

Comments
 (0)