标签:

C++

参考文章:https://blogs.oracle.com/pcarlini/entry/c_1x_tidbits_lambda_expressions 或许,Lambda 表达式算得上是 C++ 11 新增特性中最激动人心的一个。这个全新的特性听起来很深奥,但却是很多其他语言早已提供(比如 C#)或者即将提供(比如 Java)的。简而言之,Lambda 表达式就是用于创建匿名函数的。GCC 4. ...

12 评论 4.3K 次阅读

参考文章:https://blogs.oracle.com/pcarlini/entry/c_1x_tidbits_introducing_generalized 先看一个简单的例子。 C++ 中有一个常数表示式(constant expression)的概念。比如,3 + 4 这个表达式会在编译期自动生成 7,而且不会有任何副作用。常数表示式是编译器优化的最佳位置。编译器通常在编译期执行优化,并 ...

0 个评论 1.6K 次阅读

参考文章:https://blogs.oracle.com/pcarlini/entry/c_11_tidbits_non_static C++11 标准已经颁布一段时间。越来越多的编译器开始支持 C++11。按照 C++ 之父 Bjarne Stroustrup 的看法,C++11 “感觉就像一个新语言,一个更好的新语言”。豆子从来不反对在现有或者新的项目中使用更新的技术。新 ...

0 个评论 1.6K 次阅读

源代码概览 好了,这是我们本系列的最后一篇(希望你不会感到厌烦——不过,这也是最后一次会让你感到厌烦的机会了 ;-P)。现在,让我们亮出我们的源代码。浏览源代码相当复杂,我们也是能给出一些简单代码片段的解释。通过前面的章节可以看出,我们实际已经耗费的大量精力在组织源代码结构上,试图让我们的代码更易于重用。我们将源代码依据其功能分为多个库,这些库又会依赖于其他的库。我们有一个核心库,两个游戏相关库以 ...

5 评论 2K 次阅读

开始游戏! 到了玩游戏的时候啦!现在我将告诉你如何来玩这个游戏。你可以在此了解到PluginManager如何初始化、怪物怎样被创建、战斗如何开始等。我们从main() 开始。 下面是main() 函数的代码。直接跳过所有的#include 语句,集中精力看看DummyInvokeService() 函数。这个函数作为由插件接收的 PF_Platf ...

0 个评论 1.6K 次阅读

静态 C++ 插件 下面的代码用于初始化静态插件。这依然是一个 C++ 插件,但是其初始化工作迥然不同。所有的动态插件(C 和 C++ 的)必须 实现我们定义的入口点函数 PF_initPlugin。这是PluginManager初始化插件所需要寻找的。但是,静态插件会静态链接到应用程序。这意味着,如果两个函数使用了相同的函数名,就会发生名字冲突,应用程序会链接失败。所以,静态插件必须有 ...

0 个评论 1.6K 次阅读

现在,让我们来把前面章节中缺失的部分补上。在我们这部分内容的最后,我们会得到一个完整的代码。 怪物插件 基于前面我们介绍的插件框架,我故意创建了四种不同类型的插件: 纯 C++ 插件 纯 C 插件 部署为动态/共享库的混合插件 应当直接链接到可执行文件中的 C++ 静态插件 所有这些插件都会将其怪物对象作为 actor 注册到PluginManager。另外,游戏本身提供了Hero 类, ...

0 个评论 1.6K 次阅读

ActorBaseTemplate ActorBaseTemplate是混合实现的核心。插件开发者需要继承这个类,实现 C++ 的IActor接口,插件则通过 C 接口与插件管理器交互,这样才能保证二进制兼容。插件开发者则不应当看到这个 C 接口,C 接口对于插件开发者应当是完全透明的。

0 个评论 1.6K 次阅读

在前面的章节中,我们详细讨论了 C++ 二进制兼容性的困难。然后,我们引入了插件框架的设计和实现,讨论了插件的生命周期、跨平台开发的注意事项以及如何根据业务模型设计基于插件的系统等等。下面,我们将讨论如何使插件通过 C 接口与应用程序交互,同时还能允许开发者使用 C++ 接口开发插件。最后,我们将开始 RPG 游戏的编码,同样会基于这个插件模型。我们将介绍游戏的概念、如何以及为什么这么设计接口,最 ...

0 个评论 1.6K 次阅读

关于我

devbean

devbean

豆子,生于山东,定居南京。毕业于山东大学软件工程专业。软件工程师,主要关注于 Qt、Angular 等界面技术。

主题 Salodad 由 PenciDesign 提供 | 静态文件存储由又拍云存储提供 | 苏ICP备13027999号-2