问题标签 [pimpl-idiom]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C ++如何使二维引擎平台独立
使用跨平台抽象 API 创建一个简单的 2D sprite 引擎 ■ 演示应该是完全跨平台的,并且没有特定于平台的标头 ■ 跨平台代码与平台相关代码完全隔离,因为没有任何包含的痕迹任何平台无关文件中的平台特定标头。
我有这个任务,但我对如何跨平台制作东西感到非常困惑。我已经有一个能够做它必须做的事情的引擎,但我需要它是跨平台的。我主要想知道我可以包含哪些内容(或者,我如何知道某些内容是否使用特定于平台的代码),如果我不能包含某些内容,因为它们是特定于平台的,我不知道如何在没有包括它。根据一位同学的说法,解决方案存在于抽象和 Pimpl 中,但我找不到。
c++ - 发现编译时瓶颈以便有效地编译防火墙
我有这个需要很长时间才能构建的大型 C++ 增强项目,所以我正在尝试设置编译防火墙。现在我可以按照我的直觉撒粉刺或纯接口,但这似乎不是很有效......通常如果我想优化一段代码,我会通过分析器运行它以查看导致我以下的瓶颈问题:如何查看编译时间的瓶颈在哪里?
欢迎所有答案,包括尝试替代编译器,因为代码是跨平台的(交叉手指!)
谢谢,
c++ - c++ pimpl 和抽象类在一起
请看下面的代码(一个代码值一千字):
形状.hpp
形状.cc
我知道错误来自哪里,但我更关心良好做法。我的问题:
在上述代码的情况下,将 Pimpl 与 ABC 混合是一个坏主意吗?
如果没有,避免错误的最佳方法是什么(保持封装等)?
如果是,我必须做什么才能在向用户隐藏实现的同时获得多态性(在我的
Shape
场景中)?
Obs:假设性能不是问题。
谢谢你。
c++ - 编译 pimpl 成语代码的问题
我一直在尝试使用“pimpl”习语,但我就是无法编译该死的东西。
在带有 g++ v. 4.6.3 的 Linux Mint 上,我收到以下错误:
这是我的代码:
人.hh
个人.cc
主文件
除了代码错误之外,您能否就我模仿“pimpl”习语所采取的方法提出建议?这符合吗?
c++ - 在调试器中查看来自 DLL 的 pimpl
我正在使用 pimpl 习惯用法来隐藏接口的实现细节,这样我就可以对 ABI 进行一定程度的保护。我对 MS 的来龙去脉不是很精通……在我的大部分开发生涯中都使用 Linux。
我无法从调试器检查窗口查看 pimpl 的内部。我的类型仅扩展为指向 impl 的原始指针(它使用智能指针)。我试过导出符号,但这似乎不起作用。我想我实际上试图查看的符号没有被导入或其他东西。
我该如何补救?可视化器可以调用函数吗?
编辑——也许我把人们和出口的事情搞混了。
我正在尝试这个:
对象.h:
对象.cpp
我能想到解决问题的唯一方法是将 impl 放在库的调试版本中包含的标头中。希望有更好的解决方案。
c++ - C++ const 正确性漏洞或意外使用?
我遗漏了一些东西,或者 const-correctness 与指针(或者可能是智能指针,因为这是我测试过的?)的预期效果不太一样。无论如何,这是我在尝试 PIMPL 习语的变体时观察到的。
我声明了以下内容:
对于实施,我有类似的东西:
我难以理解的是如何摆脱const
对函数使用限定符A::update_stuff(...)
以及A::update_stuff_impl(...)
何时实际修改A::pimpl::some_data
??!或者这是预期的行为还是只是简单的错误使用?如果是后者之一,如果您能确定如何纠正它,请欣赏?
感谢您的时间和兴趣。
c++ - pimpl 习惯用法和构建器模式之间的重叠?
我正在阅读来自http://en.wikibooks.org/wiki/C%2B%2B_Programming/Code/Design_Patterns#Creational_Patterns链接的构建器模式,下面的代码似乎使用类似于 pimpl idiom 的想法,有一个指向 PizzaBuilder 的指针在 Class Cook 中作为私人成员。皮条客惯用语及其在设计师模式中的使用方式之间是否有任何重叠?
c++ - Hide implementation details via internal pointer
I have following third-party class(just wrapper around some pointer):
I want to modify A
's interface: disable some methods, add some new, while hiding its implementation details. I decided to do following:
Is it ok to do so? Maybe there is better solution? I want to change A
interface because it doesn't fit my needs and don't want to keep it in my own code.
c++11 - 带有 pimpl 的类可以使用带有 pimpl 的对象吗?
Pimpl是“实现指针”的缩写,它提供了一种方便的方法来隐藏类中的实现。我正在实现一个 Window 类,它对此类的用户隐藏特定于平台的功能和结构,因此类接口最终看起来很干净:
幕后都是那些讨厌的 WINAPI 调用等,当我可能针对更广泛的支持平台时,类头根本不需要更改,只需要更改源文件。非常好用,不用写那么多!
但是,这个对象似乎是我的问题(在类内):
这是一个 Direct3D/OpenGL 图形上下文(“ContextGraphics”的用户可以确定),您可能已经猜到,它也使用 pimpl-idiom:
我面临的问题是编译器:
Window.cpp|145|错误:无效使用不完整类型'class ContextGraphics::Helper'|
ContextGraphics.hpp|43|错误:'class ContextGraphics::Helper'的前向声明|
编译器似乎没有找到类“ContextGraphics::Helper”的实现,这只会引发一个问题,即带有 pimpl 的类是否可以使用带有 pimpl 的对象。如果不将所有实现都放在 Window 类源文件中,这可能吗?对我来说,这似乎不是一个合理的解决方案。
c++ - 通过 PIMPL 成语设计调用构造函数
现在使用 PIMPL 成语我正在尝试以这种方式调用 ProcessImpl 构造函数:
但我收到以下错误错误:在初始化中无法将 ProcessImpl 转换为 ProcessImpl*
请帮助解决此错误,并让我知道调用正确的方法