Microsoft c++ __declspec(property({get|put}))特殊属性

概念:

__declspec是microsofr C++专用修饰符,详细信息请参考官方文档

地址:__declspec | Microsoft Docs

场景:

当我们需要对class/struct中的成员变量进行访问时,能不能像C#那样像访问成员变量一样,而不是调用getter/setter这样的函数,这样可以提高代码的简洁性和可读性。那么我们可以通过__declspec(property({get|put}))来实现。

实现

我们定义类/结构体

struct PropertyCase
{
private:
    std::string data; //实际存储
public:
    //getter
    std::string getData() const
    {
        //对data数据进行处理
        return data;
    }
    //setter
    void setData(int64_t d)
    {
        data = std::to_string(d);
    }
    void setData(double d)
    {
        data = std::to_string(d);
    }
    void setData(bool d)
    {
        data = d ? "true" : "false";
    }
    void setData(std::string d)
    {
        data = d;
    }

    void setData(const char* d)
    {
        data = d;
    }

    __declspec(property(get = getData, put = setData)) std::string m_data; //用户访问

};

1.__declspec(property(get = getData, put = setData)) 其中get和put属性并不是必须全部包含,当只需要读取时 只需要指定get,当只需要存储时只需要put.如果没有指定相应的属性函数,在进行相应操作时编译报错

2.定义m_data类型应与get接口返回类型一致,当没有get属性时可以时任意非无类型类型(void)

3.定义的m_data实际并不影响类或结构体的实际大小

4.m_dala在getter/setter中应用实际是调用的getter/setter函数自身,如果没有推出条件,会递归到栈溢出

调用结果

int main()
{

    PropertyCase pc;
    std::cout << "size = " << sizeof(PropertyCase) << std::endl;
    pc.m_data = 12LL;
    std::cout << "pc.m_data = " << pc.m_data << std::endl;
    pc.m_data = 12.1;
    std::cout << "pc.m_data = " << pc.m_data << std::endl;
    pc.m_data = "PropertyCase";
    std::cout << "pc.m_data = " << pc.m_data << std::endl;
    pc.m_data = true;
    std::cout << "pc.m_data = " << pc.m_data << std::endl;

    return 0;

}

总结

__declspec(property({get|put})) 使我们可以像访问成员变量一样访问成员函数对成员变量进行getter和setter,使变量的访问更加透明,,提高了代码的可读性,简化函数调用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: __declspec(dllimport) 是一个 Microsoft Visual C++ 扩展关键字,用于在动态链接库导入函数或数据。它可以用于在编译时指定动态链接库的函数或数据,以便在运行时使用。 ### 回答2: __declspec(dllimport)是用于在C++声明导入动态链接库函数和变量的关键字。在Windows平台上,动态链接库(Dynamic Link Library,简称DLL)是一种将可执行代码和数据封装在一起的文件格式,允许多个程序共享这些代码和数据。使用__declspec(dllimport)关键字可以使程序在编译阶段就知道这些函数和变量是从动态链接库导入的。 在C++程序,如果我们需要使用动态链接库的函数或变量,需要先通过__declspec(dllimport)对这些函数或变量进行声明,然后再进行调用或使用。声明方式如下: __declspec(dllimport) returnType functionName( parameter list ); 其,returnType表示函数返回值的类型,functionName表示函数名,parameter list表示函数的参数列表。 对于变量的声明,格式如下: __declspec(dllimport) dataType variableName; dataType表示变量的类型,variableName表示变量名。 通过这种方式,程序在编译时就会知道这些函数和变量是从外部导入的,可以正确引用和使用。 总结来说,__declspec(dllimport)关键字主要用于在C++声明导入动态链接库函数和变量。它在程序编译阶段就告诉编译器这些函数和变量是从其他地方导入的,使得程序可以正确引用和使用这些导入的函数和变量。 ### 回答3: __declspec(dllimport) 是一个用于 C/C++ 编程语言Microsoft 扩展,用于指定在编译时导入 DLL 定义的函数或变量。该关键字的作用是告诉编译器和链接器,在当前的源文件,所使用的某个函数或变量是在外部的 DLL 文件定义的,需要从 DLL 文件导入。 在使用 __declspec(dllimport) 关键字时,需要先使用 __declspec(dllexport) 关键字在 DLL 文件导出相应的函数或变量。然后在其他的源文件,通过 __declspec(dllimport) 关键字来声明相应的函数或变量,告诉编译器和链接器需要从 DLL 文件导入该函数或变量的定义。 __declspec(dllimport) 关键字可以在函数或变量的声明前使用,以指定导入的函数或变量的属性。它告诉编译器该函数或变量是在其他 DLL 文件定义的,并且编译器在编译时会将其处理为外部引用。这样,程序在运行时就可以动态地加载和使用 DLL 文件的函数或变量。 总结来说,__declspec(dllimport) 是一个 Microsoft 扩展,用于在 C/C++ 编程语言指定从 DLL 文件导入函数或变量的关键字。通过使用这个关键字,可以告诉编译器和链接器在编译时将引用的函数或变量作为外部引用,并在运行时动态地加载和使用 DLL 文件的相应函数或变量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值