也許增加has_property價值,您的基本模板參數會爲你工作:
template <typename T, class MyClass, bool hasPropertyValue>
struct Base {
T data;
static constexpr bool has_property = hasPropertyValue;
};
template <typename T>
struct Derived : public Base<T, Derived<T>, false > {
};
[UPDATE1] 對於數組 - 而不是通過單一的布爾值 - 包含通結構值:
template <typename T, class MyClass, class MyClassPropertyValues>
struct Base {
T data;
static constexpr bool has_property[MyClassPropertyValues::length];
};
template <typename T, class MyClass, class MyClassPropertyValues>
constexpr bool Base<T, MyClass, MyClassPropertyValues>::
has_property[MyClassPropertyValues::length] = MyClassPropertyValues::initValues;
struct DerivedPropertyValues {
static constexpr size_t length = 3;
static constexpr bool initValues[length];
};
constexpr bool DerivedPropertyValues::initValues[length] = { true, false, true };
template <typename T>
struct Derived : public Base<T, Derived<T>, DerivedPropertyValues > {
};
你想要'靜態constexpr'(C++ 11)或'靜態const'(C++ 03)嗎? – iammilind 2012-07-08 07:57:07
你錯過了'constexpr'的類型(可能是'bool')。 – juanchopanza 2012-07-08 07:57:48
@iammilind我想要'static const',並認爲有一些好處可以讓你在定義中初始化'static constexpr'。 ? – user 2012-07-08 08:02:18