Redian新闻
>
问个问题,关于隐藏实现细节, C plusplus
avatar
问个问题,关于隐藏实现细节, C plusplus# Programming - 葵花宝典
t*n
1
活动传送门
http://www.mitbbs.com/article_t/WaterWorld/2196593.html
★星声音·星搭档★点评赛
十月份的华语娱乐节目延续了这一年的精彩,《全能星战》《爸爸去哪儿》《梦想星搭
档》陆续播放,再掀起网友讨论热潮。歌手和经纪人、父子或者父女、歌手与歌手,很
巧合的三个节目都采用这种搭档的方式,一个人的精彩不够精彩,有互动的、有共同努
力的精彩更让人动容。
面对这些精彩的节目,有啥想说的,别憋着了,来水版说一说,独乐乐不如众乐乐。
活动时间:
即日起,到11月月末。
活动奖励办法:
每篇征文少于100字,奖励10伪币;多于100字,奖励50伪币;多于500字,奖励100伪币
。这部分奖励已经申请得到伪币中心赞助3000伪币。
此外优秀文章会有额外mark奖励,还增设版面活跃奖,参与活动帖子多于3篇的(要求
帖子数过100字),每3篇额外奖励每人100伪币,不足3篇不计。
活动帖请在标题前加[星],以方便统计;如果觉得不好看,请将活动帖及链接跟帖发在
后边。计入统计的活动会标g,漏统计的发站内信说一声。
avatar
c*u
2
需要release lib and headers to others。但是以前的设计没有考虑到这
点,头文件
里有很多实现细节。是用 abstract class还是用pimpl隐藏细节呢?还有其他方法吗?
这两种方法改起来都不简单。而且project 非常performance sensitive,这两种都有
overheard,是不是pimpl稍好?谢谢!
avatar
w*g
3
还有一种办法,就是干脆包一层C的API. 工作量应该跟abstract class或者pimpl想当,
但是更加generic.而且免了你在两者间做选择.不少支持第三方语言API的轮子都是
C++实现套C API.
我个人比较喜欢abstract class, 我觉得更加elegant. Performance几乎不会有任何
差别. 不信你可以用perf去测. abstract class vs pimpl实现用perf测出来
第一行百分比变化我觉得不会超过2%. 我可以赌100伪币.

【在 c*******u 的大作中提到】
: 需要release lib and headers to others。但是以前的设计没有考虑到这
: 点,头文件
: 里有很多实现细节。是用 abstract class还是用pimpl隐藏细节呢?还有其他方法吗?
: 这两种方法改起来都不简单。而且project 非常performance sensitive,这两种都有
: overheard,是不是pimpl稍好?谢谢!

avatar
Y*G
4
现在貌似“继承"是个很糟糕的概念,用嵌入才是正道。golang干脆取消了继承。

【在 w***g 的大作中提到】
: 还有一种办法,就是干脆包一层C的API. 工作量应该跟abstract class或者pimpl想当,
: 但是更加generic.而且免了你在两者间做选择.不少支持第三方语言API的轮子都是
: C++实现套C API.
: 我个人比较喜欢abstract class, 我觉得更加elegant. Performance几乎不会有任何
: 差别. 不信你可以用perf去测. abstract class vs pimpl实现用perf测出来
: 第一行百分比变化我觉得不会超过2%. 我可以赌100伪币.

avatar
c*u
5
包一层一个function 要call两遍,感觉会比abstract 还慢。我试了pimpl,nested
class在init lock和access parent class的时候都有问题。还没找到解决办法。我再
试试abstract 吧。好多头文件,头大。
多些回答。


: 还有一种办法,就是干脆包一层C的API. 工作量应该跟abstract class或者pimpl
想当,

: 但是更加generic.而且免了你在两者间做选择.不少支持第三方语言API的轮子都是

: C 实现套C API.

: 我个人比较喜欢abstract class, 我觉得更加elegant. Performance几乎不会有
任何

: 差别. 不信你可以用perf去测. abstract class vs pimpl实现用perf测出来

: 第一行百分比变化我觉得不会超过2%. 我可以赌100伪币.



【在 w***g 的大作中提到】
: 还有一种办法,就是干脆包一层C的API. 工作量应该跟abstract class或者pimpl想当,
: 但是更加generic.而且免了你在两者间做选择.不少支持第三方语言API的轮子都是
: C++实现套C API.
: 我个人比较喜欢abstract class, 我觉得更加elegant. Performance几乎不会有任何
: 差别. 不信你可以用perf去测. abstract class vs pimpl实现用perf测出来
: 第一行百分比变化我觉得不会超过2%. 我可以赌100伪币.

avatar
d*i
6
没看懂,头文件里应该没有任何具体实现的细节,只有函数/类/变量的声明,怎么会有
问题呢?比如下面的头文件:
//my_header.h
int foo1();
void foo2(char* a);
class MyClass {
public:
bool foo3(int a);
};
所有的实现都应该放在cpp文件里面进行,哪怕是用了template也是如此。

【在 c*******u 的大作中提到】
: 需要release lib and headers to others。但是以前的设计没有考虑到这
: 点,头文件
: 里有很多实现细节。是用 abstract class还是用pimpl隐藏细节呢?还有其他方法吗?
: 这两种方法改起来都不简单。而且project 非常performance sensitive,这两种都有
: overheard,是不是pimpl稍好?谢谢!

avatar
S*s
7
priviate members are also included although they should be hidden.

【在 d****i 的大作中提到】
: 没看懂,头文件里应该没有任何具体实现的细节,只有函数/类/变量的声明,怎么会有
: 问题呢?比如下面的头文件:
: //my_header.h
: int foo1();
: void foo2(char* a);
: class MyClass {
: public:
: bool foo3(int a);
: };
: 所有的实现都应该放在cpp文件里面进行,哪怕是用了template也是如此。

avatar
d*i
8
当然,private和public都可以声明在头文件里面,而且其实也只能这样声明类,实现
的话都应该放到cpp文件里面。

【在 S*******s 的大作中提到】
: priviate members are also included although they should be hidden.
avatar
r*o
9
put all private data and functions into a private data blob class.
for example;
====== .h =====
class MyPrivateClass
class MyClass {
public:
// public data fields and functions
void foobar();
private:
MyPrivateClass * pc;
char datablob[xxx]; // if you don't want dynamic allocation
}
============ .cpp ========
class MyPrivateClass {
friend class MyClass;
private:
// anything you don't want to export
// all data are private, except
// MyClass is friend

}
void MyClass::foobar() {
return pc->func(this);
}
avatar
S*s
10
这个“当然”的意思是你问上面的问题之前就知道这个答案?那个问题不是求教而是考
察?

【在 d****i 的大作中提到】
: 当然,private和public都可以声明在头文件里面,而且其实也只能这样声明类,实现
: 的话都应该放到cpp文件里面。

avatar
c*u
11
这个就是Pimpl的一种实现。

【在 r***o 的大作中提到】
: put all private data and functions into a private data blob class.
: for example;
: ====== .h =====
: class MyPrivateClass
: class MyClass {
: public:
: // public data fields and functions
: void foobar();
: private:
: MyPrivateClass * pc;

avatar
k*g
12
现在template已经可以不用放在头文件里了吗?

【在 d****i 的大作中提到】
: 没看懂,头文件里应该没有任何具体实现的细节,只有函数/类/变量的声明,怎么会有
: 问题呢?比如下面的头文件:
: //my_header.h
: int foo1();
: void foo2(char* a);
: class MyClass {
: public:
: bool foo3(int a);
: };
: 所有的实现都应该放在cpp文件里面进行,哪怕是用了template也是如此。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。