001
24.06.2004, 18:48 Uhr
0xdeadbeef
Gott (Operator)
|
Wie wärs damit:
C++: |
#include "boost/mpl/bool.hpp" #include "boost/mpl/if.hpp"
template<typename _t = unsigned long, size_t _dsize = sizeof(_t)> class my_class { private: inline void _aux_assert_valid_dsize(_t const * const) const { } inline void assert_valid_dsize() const { _aux_assert_valid_dsize(boost::mpl::if_<boost::mpl::bool_<_dsize != 0 && _dsize <= sizeof(_t)> , _t*, _t**>::type(0)); }
public: my_class() { assert_valid_dsize(); } };
int main() { my_class<unsigned long, 3> m; // my_class<unsigned long, 5> n; // my_class<unsigned long, 0> o; }
|
Wenn die Bedingung nicht erfüllt ist, versucht er _aux_assert_valid_dsize mit nem t** aufzurufen, was nicht geht, weil der Prototyp nicht da ist. Ist vielleicht nicht die hübscheste Konstruktion, aber naja - darauf sollte man aufbauen können. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 24.06.2004 um 18:53 Uhr von 0xdeadbeef editiert. |