问题标签 [loki]
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++: Loki StrongPtr 对我来说看起来不安全,是这样吗?
我目前正在研究最流行的智能 Ptr 实现,例如提升共享指针和弱指针以及 loki智能和强指针,因为我想实现自己的,据我所知,Loki 强指针对我来说看起来不安全,但我宁愿认为我理解错了,所以我想讨论一下它是否安全。我认为它不安全的原因是,据我所知,它没有足够小心地对待弱指针(即 StrongPtr,其中 false 表示其弱):
例如取消引用功能:
在多线程环境中,弱指针可能随时失效,因此该函数可能会返回一个失效的 Ptr。
据我了解,您要么必须创建要取消引用的 ptr 的 strongPtr 实例,以确保它不会在中途失效。我认为这也是 boost 不允许您在不先创建 shared_ptr 实例的情况下取消引用 weak_ptr 的原因。我认为 Lokis StrongPtr 构造函数遇到了同样的问题。
这是一个问题还是我读错了 src?
c# - C# Typelist 类似于 Loki::Typelist 与层次结构生成器
我喜欢 Loki 的 C++ HierarchyGenerator 并且想在 C# 中做同样的事情。
我最终想要的是一个在给定类型列表中每个参数都有一个虚函数的类。
我想转换的 C++ 代码:
在 C# 中。如果您不熟悉 Loki,上面的 FooSend 类将默认为:
但是当给定一个新的 TList 时,它会是基于 TList 中的类型的不同层次结构。
我也对 Loki 中的 GenLinearHierarchy 感兴趣,如果它存在的话。
我总是可以尝试在两种语言之间进行翻译,但我不太喜欢尝试这种做法,因为我是 C# 新手,只想做我的工作,而不是了解模板和泛型之间的细微差别。
c++ - Loki's SetLongevity function seems unsafe to me, is that so?
There is a global variable called "pTrackerArray", which is used in Loki's SetLongevity function.
Declaration of pTrackerArray:
Definition of SetLongevity:
Is it thread safe to use pTrackerArray as such in SetLongevity?
c++ - Loki 函子 - 内存问题
我在我的项目中使用 Loki::Functor 来构建一个简单的事件系统。该事件的处理函数采用一些参数。在这种情况下,它被称为PrintEventString
。为了将它放入队列中,事件处理程序必须具有相同的原型——在我的例子中,void func(void)
. 所以CreateEvent
获取处理程序,从中创建函子并绑定参数,从而产生void f (void)
原型。一切正常(第一个示例,字符串存储在局部变量中),直到我在调用仿函数之前销毁数据源(第二个示例,临时创建的字符串)。这是代码:
这编译,执行,但第二个测试不起作用,valgrind 抛出一堆错误:
我怀疑函子只引用传递的对象,然后将其销毁(作为临时创建的)并且问题开始了。但是我在这里做错了什么?我认为绑定将用于存储环境的一部分(正如安德烈在他的书中所描述的那样),以便可以破坏环境。
c++ - 现代 C++ 设计中的示例代码
我已阅读“现代 C++ 设计”
,我在其示例代码中有一个问题
在 p278 p279 中
,如果您没有 MutilMethods.h 中的 BasicDipatcher::Add 和 BasicDispatcher::Go 这本书,请参考Loki
的源代码
在 p278 页底部到 p279 向上
它有一段示例代码
我在函数 Go 中发现,它的参数是 BaseLhs&,BaseRhs&
在这种情况下,应该是Shape&,Shape&
在函数 Add 中,它的参数是 SomeLhs&,SomeLhs&,
在这种情况下,应该是Rectangle&,Poly&
所以密钥无论如何都不匹配,因为它们是不同的
因此不会调用回调(HatchRectanglePoly)
(如果我在相同的代码中添加 disp.Go....),
而是会抛出 std:runtime_error
我对么??
谢谢
c++ - 为什么 C++ 智能指针实现将引用计数器与指针保持在堆上?
阅读 Alexandrescu 和 wikipipidia 我看到指针和引用计数器存储在堆上。然后提到引用计数效率低下,因为计数器必须在堆上分配?为什么不存储在堆栈中?
design-patterns - 为什么 AbstractFactoryUnit 具有动态而不是静态多态性?
我目前正在学习现代 c++ 并专注于抽象工厂,据我了解,Loki 的主要思想之一是避免 GoF 中使用的“虚拟”(动态多态)。但有时,它仍然被使用。在关于抽象工厂的一章中,AbstractFactoryUnit 具有“虚拟”。http://loki-lib.cvs.sourceforge.net/loki-lib/loki/include/loki/AbstractFactory.h?view=markup从我目前阅读的内容来看,有很多方法可以绕过它。http://en.wikipedia.org/wiki/Template_metaprogramming#Static_polymorphism
为什么在这种情况下使用 virtual 更有效?
c++ - 为 TypeList 实现 Loki IndexOf
我正在实现一个基于 Loki 的 TypeList,基于以下内容:
http://aszt.inf.elte.hu/~gsd/halado_cpp/ch06s09.html
并从网站上看到了 IndexOf 的代码(在类型列表中查找类型的索引):
这似乎行不通,因为在递归遍历列表时,我在任何地方都看不到比较 T 的东西。在我的实现中,它看起来像这样:
而且,事实上,总是返回 -1。如果我想到它,想象一个有 TypeList;然后 Tail 将是 NullType,因此 temp 将通过专业化为 -1,然后 value 将为 -1 ..即使 Head 是 char 而我预计为零。我在这里想念什么?
谢谢
我对 Typelist 的实现仅仅是:
我猜这不是 Lokis,但随着 Joel 的回答,我得到了这个为我工作:
c++ - c++派生类的类型列表
使用 CRTP(奇怪的重复模板模式),您可以为基类提供派生类的知识。创建一个数组来存储从基类派生的每个类的实例并不难(参见示例)
我想知道是否可以创建所有派生类类型的 Typelist(请参阅http://www.research.ibm.com/designpatterns/pubs/ph-jun00.pdf)。问题是,每次编译器看到一个派生自Base
它的新类时,都需要将新类型附加到列表中,但类型列表是不可变的(可以创建一个附加新类型的新列表,但添加据我所知,列表中的元素是不可能的。最后我想要这样的东西:
最终目标是能够遍历所有派生自Base
.
c++ - 了解 Loki 库中的 STATIC_CHECK
当我们尝试将指针转换为 char 时,上面的代码工作正常并给出编译时错误。但它不是很清楚 STATIC_CHECK 宏是如何工作的。
根据上面的代码,它应该导致以下
上面的宏将扩展如下:
在上面的宏中,我无法理解这两个语句的含义
如果有人有清楚的了解,请解释