@ Керрек достаточно ответил на вопрос, но это может быть более общим следующим образом:
template<bool b, typename T, typename U>
struct select
{
typedef T type;
};
template<typename T, typename U>
struct select<false, T, U>
{
typedef U type;
};
И использовать как:
template <bool S>
class NuclearPowerplantControllerFactoryProviderFactory
{
typedef typename select<S, int, unsigned int>::type data_t;
//use data_t as data type
};
Если S
равно true, будет выбран первый аргумент типа в select
, или же будет выбран аргумент второго типа. Он является общим, потому что вы указываете оба типа в select<>
, и, основываясь на значении логического значения, select<b,T,U>::type
возвращает либо первый тип, либо второй тип.