在洛基库实现了一些使用非常广泛的概念(智能指针,访客,工厂等).经常提到相关的书"现代C++设计",但图书馆本身并没有被广泛使用.这是为什么?
大多数开发人员似乎更喜欢Boost.特别是,为什么人们经常决定使用Boost的智能指针而不是Loki?
毫无疑问,很多人都熟悉Alexandrescus ScopeGuard先生模板(现在是Loki的一部分)和新版ScopeGuard11:http://channel9.msdn.com/Shows/Going+Deep/C-and-Beyond-2012- 安德烈- Alexandrescu的系统性,错误处理-在-C
来源:https: //gist.github.com/KindDragon/4650442
在他在c ++和2012年以后的演讲中,他提到他无法找到一种方法来正确检测范围是否因异常而退出.因此,当且仅当由于异常而退出作用域时,他才能实现SCOPE_FAIL宏,该宏将执行提供的lambda(通常用于回滚代码).这将使得dismiss()成员函数不再需要,并使代码更具可读性.
既然我不像Alexandrescu先生那样天才或经验丰富,我希望实施SCOPE_FAIL并不像以下那么容易:
~ScopeGuard11(){ //destructor
if(std::uncaught_exception()){ //if we are exiting because of an exception
f_(); //execute the functor
}
//otherwise do nothing
}
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么不呢?
我一直在阅读Alexandrescu的书,现代C++设计,我对他使用的技术印象深刻,所以我想在我的应用程序中添加Loki库.
然而,经过进一步的调查,我看到我已经在使用的提升提供了很多类似的功能(不是全部,但是,例如,我无法在boost中找到单例)
由于基于策略的设计和仿函数,我最感兴趣的是使用loki.
对我而言,boost和loki都有利有弊.我对loki的主要关注是糟糕的文档(图书馆不再与书籍联系在一起了)但在我看来,loki比某些领域的提升更强大,更灵活(我可能错了)
在选择使用boost或loki作为仿函数和策略之前,我想知道在现实生活中使用它们的人的意见.
有时在纸上看起来非常好但是当你真正使用它们时会有一些缺点:)
我一直在使用Loki的Functor,我最近问了一个关于它的问题(仍然没有答案......)我被告知要使用std :: function,但我更喜欢Loki的Functor实现,因为它也适用于各种各样的指针作为参数(例如std :: shared_ptr).
struct Toto
{
void foo( int param )
{
std::cout << "foo: " << param << std::endl;
}
};
int
main( int argc, const char** argv )
{
std::shared_ptr<Toto> ptr = std::make_shared<Toto>();
Loki::Functor<void, LOKI_TYPELIST_1(int)> func( ptr, &Toto::foo );
func(1);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法用std :: function做到这一点?
我读使用了现代C++设计泛型编程和设计模式由安德烈Alexandrescu的和章11多方法的交易正好与我试图解决这个问题.本书的所有源代码都发布在一个名为Loki的库中.
问题是,这本书是相当老的(2001)和有限制的那些交易不再是真实的C++ 11(如该模板参数的数量不能是变量).我试着查看Loki是否已经使用C++ 11进行了重写,但是最后一次修改是在2009年,并且Andrei Alexandrescu的主页上没有更新.然而,在做了一些研究后,我觉得Loki就像Boost一样,它被合并到标准库中.
C++ 11中是否采用了多方法成语或部分内容?
阅读Alexandrescu和wikipipidia我看到指针和引用计数器存储在堆上.然后提到引用计数是低效的,因为必须在堆上分配计数器?为什么不将它存储在堆栈中?
我正在寻找一个可以存储数据的 indexedDB 包装库。
(具体用途是针对 JavaScript 科尔多瓦应用程序,但也可以在浏览器中运行)
我发现LokiJS似乎可行。然而,LokiJS 说这是一个:
具有持久性的内存 JavaScript 数据存储
但我不明白“内存中”是什么意思。我尝试谷歌搜索,环顾四周,但找不到简洁的解释......
“内存中”indexedDB 与常规 indexedDB 有何不同?
loki ×7
c++ ×6
boost ×3
c++11 ×2
cordova ×1
functor ×1
in-memory ×1
indexeddb ×1
lokijs ×1
multimethod ×1
raii ×1
scopeguard ×1
std-function ×1