Это делается через частичную специализацию. Самая грубая версия выглядит так:
template <typename, bool> class superclass1;
template <class param> class superclass1<param, true>
class superclass1
{
public:
int foo()
{
doSomthingMore();
return 1;
}
};
template <class param> class superclass1<param, false>
class superclass1
{
public:
int foo()
{
return 1;
}
};
Более сложный подход может объявить функцию-член и специализировать только , что . Вот решение с помощью вспомогательных классов тегов:
#include <type_traits>
template <bool B> class Foo
{
struct true_tag {};
struct false_tag {};
void f_impl(true_tag = true_tag()){} // your code here...
void f_impl(false_tag = false_tag()){} // ... and here
public:
void foo()
{
f(typename std::conditional<B, true_tag, false_tag>::type());
}
};