免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: asuka2001
打印 上一主题 下一主题

命名难,难于上青天 [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
101 [报告]
发表于 2012-02-13 18:43 |只看该作者
回复 98# walleeee

>> 你说的py2那种访问__前缀变量的方式我到时没见过。但是py的这种语义就标准了py也提供了private这种控制方式。

1. 那你原帖说的py支持的private是什么机制?
2. 我认为应该说成py提供了信息隐藏的机制。
称为private不确切, 这种机制比C++,Java,C#里面的private要容易访问得多。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
102 [报告]
发表于 2012-02-13 18:48 |只看该作者
回复 97# walleeee

我本来就没说private有abi的问题。

原帖说的是会导致兼容性问题。 确实兼容性没说清楚……
之所以这么突兀的提兼容性又没有明确解释, 原因在上面说了,不打算像某些javaer那样片面
提到暴露定义的优势的同时, 顺带提一下其劣势。

换种说法吧…… 暴露结构体定义会产生编译依赖, 而隐藏定义可以打断之。

论坛徽章:
0
103 [报告]
发表于 2012-02-13 18:49 |只看该作者
回复 100# OwnWaterloo

其实,小菜鸟写java代码,结构是完全公开的,而且类成员全是 public
我当时就感觉怪怪的,这不完全就是c吗?搞的我烦躁了好多天!

顺便问个问题,以下这种结构,他的 数据成员 会是怎么摆放的??

#ifndef LIBXL_IBOOKT_H
#define LIBXL_IBOOKT_H

#include <stddef.h>
#include "setup.h"
#include "enum.h"

namespace libxl {

    template<class TCHAR> struct ISheetT;
    template<class TCHAR> struct IFormatT;
    template<class TCHAR> struct IFontT;

    template<class TCHAR>
    struct IBookT
    {
        virtual             bool XLAPIENTRY load(const TCHAR* filename) = 0;
        virtual             bool XLAPIENTRY save(const TCHAR* filename) = 0;   
    }
}

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
104 [报告]
发表于 2012-02-13 19:01 |只看该作者
回复 97# walleeee

我也倾向隐藏定义。但这只是一种倾向,不是绝对准则
327的之前问题就是因为C不支持private,无法控制公开了定义的成员被访问,所以绝对要隐藏定义。


我还想过如何获得隐藏定义的好处,且尽量减少损失。
假设X是暴露的,Y是隐藏的。
1. 对需要new X的case: 那其实Y并没有损失什么, 都是动态分配
2. Y的损失是在X可以在栈上分配的case

如果Y依然隐藏定义, 但暴露其大小与对齐。

  1. // libY.h
  2. struct Y;
  3. extern size_t Y_size;
  4. extern size_t Y_alignment;
复制代码
大小与对齐与Y的定义总是同步的:

  1. struct Y { ... };
  2. size_t Y_size = sizeof(Y);
  3. size_t Y_alignment = alignof(Y);
复制代码
而且Y的改动不会触发更多的编译依赖:

  1. void userY(void) {
  2.       Y* y = stack_acquire(Y_size, Y_alignment);
  3.       g(y);
  4.       stack_release(y);
  5. }
复制代码
stack_acquire/release虽然依然比调用栈分配要慢, 但被实现得比malloc高效(执行速度,内存占用,碎片情况), 因为它只需要处理栈式的请求。


不过这样手工编写太多的代码, 很麻烦……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
105 [报告]
发表于 2012-02-13 19:03 |只看该作者
三月廿七 发表于 2012-02-13 18:49
顺便问个问题,以下这种结构,他的 数据成员 会是怎么摆放的??

#ifndef LIBXL_IBOOKT_H
#define LIBXL_IBOOKT_H

#include <stddef.h>
#include "setup.h"
#include "enum.h"

namespace libxl {

    template<class TCHAR> struct ISheetT;
    template<class TCHAR> struct IFormatT;
    template<class TCHAR> struct IFontT;

    template<class TCHAR>
    struct IBookT
    {
        virtual             bool XLAPIENTRY load(const TCHAR* filename) = 0;
        virtual             bool XLAPIENTRY save(const TCHAR* filename) = 0;   
    }
}


没看到一个数据成员……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
106 [报告]
发表于 2012-02-13 19:04 |只看该作者
回复 1# asuka2001

哎…… 歪楼了……

论坛徽章:
0
107 [报告]
发表于 2012-02-13 19:06 |只看该作者
回复 105# OwnWaterloo

所以,我才问你啊

这是个头文件,IBookT类 没有成员.

struct IBookT
{
        virtual             bool XLAPIENTRY load(const TCHAR* filename) = 0;
        virtual             bool XLAPIENTRY save(const TCHAR* filename) = 0;

   

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
108 [报告]
发表于 2012-02-13 19:11 |只看该作者
回复 107# 三月廿七

少了个分号,加上后它确实没有数据成员。

论坛徽章:
0
109 [报告]
发表于 2012-02-13 21:26 |只看该作者

  1. <IBookT>
  2. +--+ &IBookT::vtbl
  3.    +---&load
  4.    +---&save
复制代码
一般是这样,不排除其他实现方法

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
110 [报告]
发表于 2012-02-13 21:27 |只看该作者
回复 106# OwnWaterloo

。。。汗,快赶上9.11的世贸大楼了的说:)


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP