将静态const数据添加到已定义的结构中

时间:2010-05-16 21:25:29

标签: c++

由于类中的静态const数据实际上只是常量的命名空间糖,我认为

struct A {
    float a;

    struct B {
       static const int b = 2;
    };

 };

等同于

struct A {
    float a;
};

struct A::B {
    static const int b = 2;
};

或类似的东西。这样的事情在C ++中是可能的吗?能够使用这样的信息标记我从第三方库中提取的类定义对我有用。

2 个答案:

答案 0 :(得分:3)

您无法在C ++中重新打开结构/类定义,因此您可以做的最好的事情是创建第三方结构的派生版本并以这种方式添加常量:

struct My_A : public A 
{
    static const int b = a;
};

否则,您可以使用基于struct typeid的键维护常量的映射。

我也喜欢Georg的想法。

答案 1 :(得分:1)

不,你不能只是那样重新定义类。

如果你想标记已经定义的类,你可以使用例如非侵入式标记。模板专业化:

template<class T> struct tagged;

template<> struct tagged<A> {
    static const int b = 42;
};