【发布时间】:2013-09-21 18:21:54
【问题描述】:
我正在尝试实现以下内容:
#include <array>
#include <cstdint>
class Class2
{
};
class Class1
{
public:
static constexpr uint8_t GetMax() { return 5; }
static constexpr uint8_t GetMin() { return 0; }
static constexpr uint8_t GetCount() { return GetMax() - GetMin() + 1; }
private:
std::array<Class2, Class1::GetCount()> m_classes;
};
但由于错误,我无法让它工作:
非类型模板参数不是常量表达式
我正在使用 Xcode 5.0。有什么想法吗?
【问题讨论】:
-
看起来你遇到了this。
-
我得到一个稍微不同的错误:“
GetCount()在其定义之前使用”。据推测,这是因为Class1在其成员声明中不完整。但这不是答案,因为 (a) 我不确定,并且 (b) 我不知道如何解决。 -
@MikeSeymour 我认为你是对的,因为在
Class1之外声明一个数组是有效的。但我想看看如何解决这个问题。 -
@MikeSeymour “成员声明不完整”是什么意思?据我所知,它是完整的。顺便说一句,这些方法不应该是内联的吗?
-
这里的评论 (stackoverflow.com/questions/9789913/…) 应该是相关的:“嗯.. 我想我们之前刚刚讨论过这个:内联函数定义被视为就好像它们是在类定义之后定义的一样;所以在类定义中它们还不可用。请注意,您始终可以说 static const int number = 256; 或 static constexpr int number = 256; 代替。"
标签: c++ templates c++11 clang constexpr