Рассмотрим следующий класс:
template<bool Condition> class MyClass
{
protected:
/* SOMETHING */ _var;
};
С std::conditional<Condition, const int, int>::type _var;
Я могу выбрать, если _var
является константным или неконстантным через параметр шаблона.
Как сделать эквивалент для статического / нестатического?
(Я прошу эквивалентный способ, какой бы метод метапрограммирования вы ни выбрали)
Вам, вероятно, придется сделать это с помощью вспомогательной структуры, так как static не является частью типа, а спецификатором хранения. Например:
template <class T, bool Static>
struct StaticSelector
{
T value;
};
template <class T>
struct StaticSelector<T, true>
{
static T value;
};
template<bool Condition> class MyClass
{
protected:
StaticSelector<float, Condition> _var;
};
Это, как говорится, легкое переключение между статическим и нестатическим, вероятно, плохая идея ..
Других решений пока нет …