我已经读过使用时会有一些编译器优化,#pragma once
这会导致更快的编译.我认为这是非标准的,因此可能造成跨平台兼容性问题.
这是非Windows平台(gcc)上大多数现代编译器支持的东西吗?
我想避免平台编译问题,但也想避免后备警卫的额外工作:
#pragma once
#ifndef HEADER_H
#define HEADER_H
...
#endif // HEADER_H
Run Code Online (Sandbox Code Playgroud)
我应该担心吗?我是否应该在这方面进一步消耗精力?
我已经退出C++游戏大约10年了,我想重新开始使用商业应用程序.现在有哪些图书馆在使用?
我期望跨平台兼容(尽可能开箱即用).
您依赖哪些图书馆?他们提供哪些功能使其"不可或缺"?
请参阅下面的答案以获取摘要.
我注意到一些java库使用它作为后缀:
log4j, couchdb4j, neo4j, launch4j, etc..
Run Code Online (Sandbox Code Playgroud) 关于pimpl成语有一些关于SO的问题,但我更加好奇它在实践中的使用频率.
我理解在性能和封装之间存在一些权衡,加上一些调试烦恼,因为额外的重定向.
有了这个,是应该采用每个类,还是全有或全无的方式?这是最佳做法还是个人偏好?
我意识到这有点主观,所以让我列出我的首要任务:
我总是假设我需要在某些时候将代码作为库公开,所以这也是一个考虑因素.
编辑:任何其他选项来完成相同的事情将是受欢迎的建议.
我和朋友创建了一家初创公司,但我们都是软件开发人员.我们很快意识到,我们将不得不处理和理解所有复杂的业务.
是否有任何资源可以帮助我们避免非商业头脑遇到的常见问题?如何平衡创建产品与保持现实目标,以缩短产品上市时间.
这就像你需要脱掉程序员的帽子并戴上商务帽,反之亦然.
有没有办法覆盖Java中的行号(例如,通过使用某种预处理器指令)?
我正在使用Janino"编译"高级语言,直到Java字节代码.我需要编译器错误来报告原始文件中的行,而不是生成的Java代码.
C#有#line指令,我已成功利用它将源文件中的行号映射到编译结果.Java需要相同的东西.
谢谢!
我刚刚继承了一个Java应用程序,在检查代码后,我看到了IMHO是Spring框架的混蛋.你看,Java团队似乎对接口有厌恶,所以我们最终得到这样的东西:
@Autowired
private SomeConcreteFinalClass _myField;
Run Code Online (Sandbox Code Playgroud)
没有Spring配置,没有定义bean,也没有机会我可以单独测试包含对象.这本质上是一个基于注释的工厂,具有Spring的开销.
我不在线,还是像用大象枪杀死苍蝇?我只需要进行现实检查,因为团队中的其他人都认为这是完全可以接受的.
编辑 在许多情况下,这些带注释的工厂出现在复杂的处理类中,这些类将从隔离测试中获益匪浅.该团队也对测试表示不满.
我希望,这里没有任何神秘感.如果我有一个具体的类,那不是一个接口,并且没有相应的Spring bean来"设置"该对象,那么它无疑是一个可以用10行代码实现的美化工厂.
Spring在系统中没有以任何其他方式使用; 就是这个.
我现在的目标:
我想最后一个问题是:如果我们没有测试或以任何其他方式利用框架,保持这些字段是否有任何好处.new
如果依赖项是不可变的,我也是对象.
我有一个TreeSet,它将充满整数.总而言之,我试图在列表中存储的最后一个(最大)值之后循环.我现在要做的是获取起始变量:
Object lastObj = primes.last();
Integer last = new Integer(lastObj.toString());
int start = 1 + last.intValue(); // the added 1 is just for program logic
Run Code Online (Sandbox Code Playgroud)
我确信必须有更好的方法将对象(我知道永远是一个int)转换为int'start'.有人知道更好的方法吗?
我正在尝试决定是否有必要通过额外的努力来封装我的IoC容器.经验告诉我,我应该在我的应用程序和任何第三方组件之间放置一层封装.我只是不知道这是否接近矫枉过正.
我可以想到我可能想要切换容器的情况.例如,我目前的容器不再维护,或者证明不同的容器更轻,性能更好,更符合我的需要.如果发生这种情况,那么我可能需要进行大量的重新布线.
为了清楚起见,我正在考虑封装类型的注册和解决方案.我认为封装解决方案是明智的 - 我希望通常的做法是将helper/util类委托给容器.
编辑:
假设我更喜欢以编程方式为类型安全,编译时检查和可重构性连接我的类型.这是该代码和它的,我正在寻找保护自己从容器上的依赖.
我也一直在为其他几个共享很多相同关系的项目使用IoC容器,但容器很难处理,所以我想要改变.但是,更改意味着我失去了注册码的可重用性.因此,为什么我正在考虑封装.这不是一个巨大的负担,但我会喜欢减轻负担.
我期待:
我意识到这有点主观,所以优点/缺点可能会有所帮助
谢谢!
另见:类似的问题
下面的代码显然很危险.问题是:你如何跟踪*this的引用?
using namespace boost;
// MyClass Definition
class MyClass {
public:
shared_ptr< OtherClass > createOtherClass() {
return shared_ptr< OtherClass > OtherClass( this ); // baaad
}
MyClass();
~MyClass();
};
// OtherClass Definition
class OtherClass {
public:
OtherClass( const *MyClass myClass );
~OtherClass();
};
// Call; pMyClass refcount = 1
shared_ptr< MyClass > pMyClass( new MyClass() );
// Call; pMyClass refcount = 1 => dangerous
pMyClass->createOtherClass();
Run Code Online (Sandbox Code Playgroud)
我有答案(在下面发布),我只想让它在stackoverflow上(如果我错了,每个人都可以纠正我.)
c++ ×4
java ×4
annotations ×1
generics ×1
janino ×1
libraries ×1
pimpl-idiom ×1
shared-ptr ×1
spring ×1
startup ×1