由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 问个问题,关于隐藏实现细节, C plusplus
相关主题
class implwhich header file declares ntohs() in c++ ?
动态连接库问题: 继承一个DLL导出的类现在流行microframework
大家node都是跑在nginx后面吗?HTTP Error 403
再挖一坑,Xamarin为啥不招人待见?我看像神器呀?设计一种c++语言的新特性
今天的学习成果[菜鸟问题]类模板问题
菜鸟求助:怎么自动include header file?请问const myClass &src 和myClass const &src有什么区别?
url header问题请问在class member function中如何调用overloaded function ca
ask a question about compile shared library using libtool问个INTERVIEW QUESTION
相关话题的讨论汇总
话题: class话题: pimpl话题: myclass话题: 实现话题: private
进入Programming版参与讨论
1 (共1页)
c*******u
发帖数: 1269
1
需要release lib and headers to others。但是以前的设计没有考虑到这
点,头文件
里有很多实现细节。是用 abstract class还是用pimpl隐藏细节呢?还有其他方法吗?
这两种方法改起来都不简单。而且project 非常performance sensitive,这两种都有
overheard,是不是pimpl稍好?谢谢!
w***g
发帖数: 5958
2
还有一种办法,就是干脆包一层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稍好?谢谢!

Y**G
发帖数: 1089
3
现在貌似“继承"是个很糟糕的概念,用嵌入才是正道。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伪币.

c*******u
发帖数: 1269
4
包一层一个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伪币.

d****i
发帖数: 4809
5
没看懂,头文件里应该没有任何具体实现的细节,只有函数/类/变量的声明,怎么会有
问题呢?比如下面的头文件:
//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稍好?谢谢!

S*******s
发帖数: 13043
6
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也是如此。

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

【在 S*******s 的大作中提到】
: priviate members are also included although they should be hidden.
r***o
发帖数: 24
8
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);
}
S*******s
发帖数: 13043
9
这个“当然”的意思是你问上面的问题之前就知道这个答案?那个问题不是求教而是考
察?

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

c*******u
发帖数: 1269
10
这个就是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;

k***g
发帖数: 166
11
现在template已经可以不用放在头文件里了吗?

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

1 (共1页)
进入Programming版参与讨论
相关主题
问个INTERVIEW QUESTION今天的学习成果
another c++ interview question菜鸟求助:怎么自动include header file?
一个partial specialization的问题url header问题
C++:如何计算一个类实例化了多少次?ask a question about compile shared library using libtool
class implwhich header file declares ntohs() in c++ ?
动态连接库问题: 继承一个DLL导出的类现在流行microframework
大家node都是跑在nginx后面吗?HTTP Error 403
再挖一坑,Xamarin为啥不招人待见?我看像神器呀?设计一种c++语言的新特性
相关话题的讨论汇总
话题: class话题: pimpl话题: myclass话题: 实现话题: private