考虑:
struct SomethingThatsABase
{
virtual bool IsChildOne() const { return false; }
virtual bool IsChildTwo() const { return false; }
};
struct ChildOne : public SomethingThatsABase
{
virtual bool IsChildOne() const { return true; }
};
struct ChildTwo : public SomethingThatsABase
{
virtual bool IsChildTwo() const { return true; }
};
void SomeClientExpectingAChildOne(std::shared_ptr<ChildOne> const& ptrOne)
{
//Does stuff
}
void SomeClient(std::shared_ptr<SomethingThatsABase> const& ptr)
{
if (ptr->IsChildOne())
{
SomeClientExpectingAChildOne(ptr); //Oops.
//Hmm.. can't static_cast here, because we need a `shared_ptr` out of …Run Code Online (Sandbox Code Playgroud) 我认为库需要使用特殊工具预处理源代码是不合理的.也就是说,有几个人向我推荐了Qt库,用于跨平台GUI开发.
没有预处理步骤,Qt有多可用?
编辑:好的人,我不是把这个问题视为对Qt的抨击 - 太多的Qt粉丝正在对待它,好像它是.我不想讨论Qt提出这个预处理工具的优点.我理解为什么这个工具在那里,我理解为什么Qt设计的大部分都建立在预处理的基础之上.
我从来没有使用过Qt,因此我无法扯掉它.但我宁愿自己写一些少量的样板,而不是依赖于撕掉我的整个构建过程.出于同样的原因,我不会在我当前的项目中使用Flex和Bison; 如果我不使用这些工具,我绝对不会使用其他类型的预处理.
所以,请不要把我当作Qt翻录.我不能评论它有多好或多不好; 我没用过它.我只是想知道是否可以不使用它moc.
可能重复:
JavaScript:var functionName = function(){} vs function functionName(){}
在Javascript中提取函数有两种可能的方法:
var foo = function() { ... }
Run Code Online (Sandbox Code Playgroud)
这有点人为; 另一个常见的模式是:
var foo = {
baz: 43,
doSomething: function() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
与
function foo() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
是否有明确的理由偏好一个或另一个?
我正在寻找一个类似于iostreams的库,它执行转换,并允许写入内存缓冲区,文件和控制台.但是,我喜欢安全的东西,就像iostream一样.有没有严肃的图书馆这样做?
能够指定事物的输出编码将是一个加号.
请注意,我不感兴趣,在图书馆它只是前iostreams的,因为他们只是增加更多的复杂性到什么iostreams的在做,例如boost::format.
PreEmptive注释响应:我不想使用cstdio,因为使用该系统不可能使代码与输出位置无关.也就是说,您必须调用一个函数将事物发送到缓冲区,并且您必须调用另一个函数来将事物发送到文件,而另一个函数则用于控制台等.
编辑2:回应下面的一系列评论:我厌倦了iostreams和cstdio.这里有更具体的原因.我试图让我的"咆哮"脱离这个问题,但人们不断问我是不是我的摇杆,所以这是我的理由.
vsnprintf)才能使用(编辑:好的,C99的C99标准库现在增加了大部分/全部)我喜欢iostreams的概念,即使是operator<<某些人似乎不喜欢的用途,但它似乎完全过于设计我.为了成为图书馆的简单客户,有人不应该花费无数个小时阅读书籍.当然,如果你要添加一个新的输出源或类似我能理解的东西,但......客户应该避免这种复杂性.(这不是图书馆的用途吗?)
这是C++中唯一令人痛苦的事情,它在其他编程语言中"正常工作",我认为没有理由变得复杂.
对于以下类型的代码,我总是得到以下警告.
std::vector v;
for ( int i = 0; i < v.size(); i++) {
}
Run Code Online (Sandbox Code Playgroud)
warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data
我明白size()返回size_t,只是想知道是否可以安全地忽略此警告,或者我应该创建所有类型的循环变量size_t
快速提问 - 为什么要使用预编译标题?
编辑:阅读回复,我怀疑我一直在做的事情有点愚蠢:
#pragma once
// Defines used for production versions
#ifndef PRODUCTION
#define eMsg(x) (x) // Show error messages
#define eAsciiMsg(x) (x)
#else
#define eMsg(x) (L"") // Don't show error messages
#define eAsciiMsg(x) ("")
#endif // PRODUCTION
#include "targetver.h"
#include "version.h"
// Enable "unsafe", but much faster string functions
#define _CRT_SECURE_NO_WARNINGS
#define _SCL_SECURE_NO_WARNINGS
// Standard includes
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <direct.h>
#include <cstring>
#ifdef _DEBUG
#include <cstdlib>
#endif
// Standard Template Library
#include <bitset>
#include …Run Code Online (Sandbox Code Playgroud) 我需要向非技术经理解释MVC(模型 - 视图 - 控制器)概念并遇到麻烦.问题是解释需要在"你的奶奶会得到它"的水平上 - 例如,即使在MVC Wiki页面上提供的相当直接的解释也不起作用,至少在我的评论中.
有没有人用简单的术语来提及一个好的MVC解释?
理想情况下,非技术隐喻的例子(例如类似于"装饰模式就像眼镜")也是如此 - 我失败的一个原因是我能想到的所有MVC例子都与开发相关.
我曾经看过一个模式解释列表但是我记忆中的MVC并没有.
谢谢!
或者,为什么retainCount我的暑假没有使用
这篇文章的目的是征求关于臭名昭着的方法的原因和原因的详细报道retainCount,以巩固围绕SO的相关信息.*
基础知识:不使用的官方理由是什么retainCount?是否有过任何情况下都当它可能是有用的?应该做些什么?**随意编辑.
历史/解释:如果不打算使用Apple,为什么Apple在NSObject协议中提供此方法?Apple的代码是否依赖于retainCount某些目的?如果是这样,为什么不把它隐藏在某个地方?
为了更深入地理解:对象可能具有与用户代码假设不同的保留计数的原因是什么?您能否举例说明框架代码可能会使用哪些标准程序导致这种差异?是否有任何已知的情况,保留计数总是与新用户可能期望的不同?
你认为还有什么值得关注的retainCount吗?
*不熟悉Objective-C和Cocoa的编码人员经常努力解决或至少误解参考计数方案.教程解释可能提及保留计数,这(根据这些解释)当你打电话上去一个retain,alloc,copy由一个当你调用等,向下release(并在当你调用未来的某一时刻autorelease).
因此,一个崭露头角的可可黑客克里斯可以很容易地认识到,检查一个对象的保留计数对于解决一些内存问题是有用的,而且,有一种方法可用于每个被调用的对象retainCount!克里斯打电话retainCount给几个对象,这个对象太高了,而且这个对象太低了,到底发生了什么?!因此,Kris在SO上发帖,"我的记忆管理出了什么问题?" 然后一群<bold>,<large>字母下降说"不要那样做!你不能依靠结果.",这是好的,但我们的强悍编码器可能需要更深入的解释.
我希望这会变成一个常见问题解答,一个很好的信息论文/讲座的页面,我们的任何专家都倾向于写一个,当他们想知道时可以指出新的可可头retainCount.
**我不想让它过于宽泛,但是经验或有关验证/调试保留和释放配对的文档的具体提示可能适合此处.
***在虚拟代码中; 很明显,一般公众无法访问Apple的实际代码.
c++ ×6
c ×1
c++11 ×1
cocoa ×1
downcast ×1
iostream ×1
javascript ×1
lock-free ×1
null ×1
objective-c ×1
qt ×1
retaincount ×1
shared-ptr ×1
stl ×1
visual-c++ ×1