加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 借助宏创建类属性

发布时间:2020-12-16 07:09:42 所属栏目:百科 来源:网络整理
导读:我需要创建一些机制,允许我声明类属性(即:成员变量),这些属性可以通过它们的名称访问,也可以在通常的类成员访问旁边访问. Qt用非常方便的Q_PROPERTY宏解决了这个问题,另一端用moc消化了.我没有这个两步编译的奢侈,我能得到的最接近的是: class SomeClass{p
我需要创建一些机制,允许我声明类属性(即:成员变量),这些属性可以通过它们的名称访问,也可以在通常的类成员访问旁边访问. Qt用非常方便的Q_PROPERTY宏解决了这个问题,另一端用moc消化了.我没有这个两步编译的奢侈,我能得到的最接近的是:

class SomeClass
{
public:
SomeClass() : bla(9),v(9.4) {}
virtual ~SomeClass(){}

int bla;
double v;

BEGIN_ATTRIBUTES(SomeClass)
    ATTRIBUTE(int,bla)
    ATTRIBUTE(double,v)
END_ATTRIBUTES()
};

哪里有明显的宏隐藏了一个丑陋的机制来存储关于类成员的一些数据,这些数据被送入一个可怕的模板化代码怪物中,这样可行,但这样做的缺点是你需要首先声明类属性然后你有一个单独的部分,您实际将类成员指定为属性.

我更像是一些代码:

class SomeClass
{
public:
SomeClass() : bla(9),v(9.4) {}
virtual ~SomeClass(){}

ATTRIBUTE(int,bla);
ATTRIBUTE(double,v);
};

但无论我怎么努力,我都无法接近这个有线的解决方案.如果有人曾经实施过类似的东西,我会感激一些提示.

解决方法

首先让我注意,属性不是惯用的C,语言会阻止您尝试使用它们.

也就是说,虽然您的问题不明确,但您是否尝试过以下方法:

#define ATTRIBUTE(type,name) 
type name##_; 
const type& get_##name() const { return name##_; } 
void set_##name(const type& v) { name##_ = v; }

class SomeClass
{
public:
    SomeClass() : bla_(9),v_(9.4) {}
    virtual ~SomeClass(){}

    ATTRIBUTE(int,bla);
    ATTRIBUTE(double,v);
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读