【发布时间】:2016-04-10 21:31:04
【问题描述】:
如果这是一个无知的问题,请原谅我,但我仍在纠结何时以及如何使用 constexpr 说明符。 (使用 msvc 14 编译)。
我正在研究一个简单的基类,它允许您将任意对象包装到“constexpr 对象”中。它看起来像这样:
template<typename T>
class basic_const {
public:
explicit constexpr basic_const(const T& value) : data_(value) { }
template <typename...Args>
constexpr basic_const(Args&&...args) : data_(T(std::forward<Args>(args)...)) { }
virtual ~basic_const() = default;
constexpr const T& data() const noexcept { return data_; }
private:
T data_;
};
一切都按预期工作,我可以成功创建可以(显然)符合constexpr 的任何类型的对象。
问题来了:
当试图从这个类继承时,我无法实现额外的constexpr 成员函数,但我可以 ctors。以下代码用于我正在实现的 constexpr 字符串类:
class str_const : public basic_const<const char*>
{
public:
template <std::size_t N>
constexpr str_const(const char(&str)[N]) :
basic_const(str), sz_(N) {}
...
constexpr std::size_t size() const noexcept{ return sz_; } // error here
...
public:
std::size_t sz_;
};
我可以在派生类中创建 constexpr 成员函数吗?
【问题讨论】:
标签: c++ c++11 visual-c++ c++14 constexpr