2

考虑以下类:

template<bool Condition> class MyClass
{
    protected:
        /* SOMETHING */ _var;
};

使用 astd::conditional<Condition, const int, int>::type _var;我可以通过模板参数选择_var是常量还是非常量。

如何为静态/非静态做等效?

(无论你想要什么元编程技术,我都要求一个等价的)

4

1 回答 1

2

您可能必须使用辅助结构来执行此操作,因为 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;
};

话虽这么说,在静态和非静态之间轻松切换可能是个坏主意。

于 2012-09-26T17:01:52.310 回答