考虑以下类:
template<bool Condition> class MyClass
{
protected:
/* SOMETHING */ _var;
};
使用 astd::conditional<Condition, const int, int>::type _var;
我可以通过模板参数选择_var
是常量还是非常量。
如何为静态/非静态做等效?
(无论你想要什么元编程技术,我都要求一个等价的)
考虑以下类:
template<bool Condition> class MyClass
{
protected:
/* SOMETHING */ _var;
};
使用 astd::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;
};
话虽这么说,在静态和非静态之间轻松切换可能是个坏主意。