|
Boost Users : |
From: David Abrahams (dave_at_[hidden])
Date: 2005-10-27 07:01:54
"Suki" <suryakiran.gullapalli_at_[hidden]> writes:
> Hi,
> I'm writing a templated class, and i dont want to use the class
> otherthan for some predetermined types, say, int, double etc.
>
> This class has no meaning for typenames other than those few.
>
> =========================
> template <class T>
> myClass {....} ;
>
> myClass<int> intClass ;
> myClass<float> floatClass ;
> myClass<char> charClass ;
> =========================
>
> The compiler should not complain for the first 2 instantiations, but
> should bail out at the 3rd instantiation (charClass). Is there any way
> i
> can achieve this, using standard c++ or boost.
Declarative way:
template <class T>
struct myClass_impl
{
...
};
template <class T>
struct myClass;
template<>
myClass<int> : myClass_impl<int>
{};
template<>
myClass<float> : myClass_impl<float>
{};
template<>
myClass<char> : myClass_impl<char>
{};
Imperative way:
#include <boost/mpl/or.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/type_traits/is_same.hpp>
template <class T>
struct myClass
{
BOOST_MPL_ASSERT((boost::mpl::or_<
boost::is_same<T,int>
, boost::is_same<T,float>
, boost::is_same<T,char>
>));
... // your class implementation here.
};
> to summarize my question,
> is there any way i can restrict the compiler to accept only few type
> names for my templated class (i.e., using standard c++ or boost)
HTH,
-- Dave Abrahams Boost Consulting www.boost-consulting.com
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net