【发布时间】:2019-02-26 00:27:07
【问题描述】:
我想将 CRTP 用于我的代码的性能敏感部分。但是,我的基类有一个位集,其大小取决于派生类。我希望这样的事情会起作用:
template <typename Derived>
class Base {
protected:
std::bitset<Derived::bsize> data_;
};
class Foo : public Base<Foo> {
public:
constexpr static size_t bsize = 2;
};
但编译器抱怨:“Foo 中没有成员 bsize”。我想我可以通过在基类中模板化位集长度来解决我的问题:
template <typename Derived, size_t size>
class Base {
protected:
std::bitset<size> data_;
};
class Foo : public Base<Foo,2> { ... };
将来,我可能想要更复杂的表达式来计算位集长度。有没有办法使用 constexpr 函数完成工作? (在精神上更接近我的第一个非工作解决方案) 谢谢。
【问题讨论】:
标签: c++ static bitset dispatch crtp