c ++ 98中的常量表达式函数

时间:2017-05-26 09:43:00

标签: c++ templates c++98 compile-time-constant constant-expression

我遇到了c ++ 98常量表达式的问题。 以下是模板结构的示例..它将在编译时接收大小..

在没有c ++ 11 constexpr的情况下,是否有可能将此大小作为常量表达式? 看看GetCount()......

    template <typename ValueType, UInt32 size>
    struct FixedArray
    {
       ValueType mArr[size > 0 ? size : 1];
       UInt32 GetCount() const { return size; }

      ...
      other code
      ..
    }

我希望能够做到这样的事情:

FixedArray<int , 10> a;
FixedArray<int , a.GetSize()> b;

编辑:

我无法找到适合C ++ 98的方法,似乎根本不可能。

2 个答案:

答案 0 :(得分:0)

你可以使用老式的enum元编程技巧:

template <typename ValueType, UInt32 size>
struct FixedArray
{
    enum {value = size};
    // All your other stuff, but ditch your GetCount() function.
};

然后,

FixedArray<int, 10> a;
FixedArray<int, a.value> b;

将在C ++ 98下编译。

答案 1 :(得分:0)

似乎在C ++ 98中无法做到这一点,它根本无法工作。