#include <boost/utility/enable_if.hpp>
template <class T, bool alt = false>
struct Shablon
{
template <bool C>
typename boost::enable_if_c<C>::type doSomething() {
((T*)this)->m_member.foo();
((T*)this)->someFoo();
}
template <bool C>
typename boost::disable_if_c<C>::type doSomething() {
}
void foo()
{
doSomething<alt>();
((T*)this)->foo2();
}
};
template <int v>
struct Int2Type
{
enum { value = v };
};
template <classT, bool alt = false>
class Shablon
{
void doSomething(Int2Type<true>)
{
((T*)this)->m_member.foo();
((T*)this)->someFoo();
}
void doSomething(Int2Type<false>)
{
}
void foo()
{
DoSomething(alt);
((T*)this)->someFoo2();
}
};
type_traits
. В visual c++ есть __if_exists
, но это некроссплатформенно.