我正在为C++项目寻找一个易于维护的便携式构建系统.主要平台应包括Windows(Visual Studio 8+)和Linux(gcc); Cygwin可能是一个优势.我们正在考虑两种主要的可能性:CMake和Boost.Jam.SCons也可以选择,但我还没有调查过.CMake和Boost.Jam似乎具有以下特征:
CMake的:
Boost.Jam:
什么是其他可能性以及经验之后的真正优势?什么构建系统可以在途中创建解决方案?
虽然我知道什么是工厂设计模式.但我无法理解使用它有什么好处.我们为什么要使用Factory Design Pattern创建对象.
PCRE具有称为递归模式的功能,可用于匹配嵌套的子组.例如,考虑"语法"
Q -> \w | '[' A ';' Q* ','? Q* ']' | '<' A '>'
A -> (Q | ',')*
// to match ^A$.
Run Code Online (Sandbox Code Playgroud)
它可以在具有模式的PCRE中完成
^((?:,|(\w|\[(?1);(?2)*,?(?2)*\]|<(?1)>))*)$
Run Code Online (Sandbox Code Playgroud)
(示例测试用例:http://www.ideone.com/L4lHE)
abcdefg abc,def,ghi abc,,,def ,,,,,, [abc;] [a,bc;] sss[abc;d] as[abc;d,e] [abc;d,e][fgh;j,k]
<abc> [<a>b;<c,d>,<e,f>] <a,b,c> <a,bb,c> <,,,> <> <><> <>,<> a<<<<>>><a>> <<<<<>>>><><<<>>>>
<z>[a;b] <z[a;b]> [[;];] [,;,] [;[;]] [<[;]>;<[;][;,<[;,]>]>]
<a bc> <abc<de> [a<b;c>;d,e] [a] <<<<<>>>><><<<>>>>> <<<<<>>>><><<<>>> [abc;def;] [[;],] [;,,] [abc;d,e,f]
[<[;]>;<[;][;,<[;,]>]]> <z[a;b>]
.NET中没有递归模式.相反,它为基于堆栈的操作提供了平衡组,以匹配简单的嵌套模式.
是否可以将上述PCRE模式转换为.NET Regex风格?
(是的,我知道最好不要使用正则表达式.这只是一个理论问题.)
import scala.swing._
import swing.event.{WindowClosing}
import java.awt.Dimension
object MenuBarTest {
def main(args:Array[String]) {
val frame = new Frame() {
visible=true
contents = new Panel() {
preferredSize = new Dimension(600,400)
}
title = "Test"
reactions += {
case WindowClosing(e) => System.exit(0)
}
menuBar = new MenuBar {
contents += new Menu("A Menu") {
contents += new MenuItem("An item")
contents += new MenuItem(Action("Action item") { println(title) })
contents += new Separator
contents += new CheckMenuItem("Check me")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
替代文字http://grab.by/grabs/4a0ffda4603149a4680415447c684129.png
我调整窗口大小的瞬间,菜单弹出. …
这可能看起来有点奇怪..但我需要评估/解析通过HTTP使用HTTP发送的块.
值得注意的是,HTTP流可能永远不会结束.有没有什么方法可以解析块,因为我用CURL 得到它们?
或者我是否必须采用一些自制的fsockopen()解决方案?
在Tcl中初始化空数组的正确方法是什么?
我有以下代码(简化):
proc parseFile {filename results_array} {
upvar $results_array results
set results(key) $value
}
set r1 {}
parseFile "filename" r1
Run Code Online (Sandbox Code Playgroud)
我收到错误:
错误:无法设置"结果(键)":变量不是数组
我对C++有点新意,所以请耐心等待.我正在试图弄清楚我#defines和#includes我的项目到底在哪里.我有这样的事情:
main.h
#include "other.h"
#define MAX_GROUPS 100
struct Cat
{
int something[MAX_GROUPS];
}
Run Code Online (Sandbox Code Playgroud)
在other.h我还需要使用MAX_GROUPS,那么我也定义MAX_GROUPS在other.h这样的:
other.h
#define MAX_GROUPS 100
struct Other
{
int taco[MAX_GROUPS];
}
Run Code Online (Sandbox Code Playgroud)
问题是我定义了一个不止一个地方.我想把它们放在一起.
或者,我会重新加入main.h吗?
other.h
#include "main.h"
struct Other
{
int taco[MAX_GROUPS];
}
Run Code Online (Sandbox Code Playgroud)
这里的问题我认为它就像一个循环的依赖性东西.main.h包括other.h哪些包括main.h哪些包括other.h哪些包括...
设置项目的定义和包含的最佳方法是什么,以便将事物排序到其他包含的文件?通常的做法是在包含之前简单地完成所有定义吗?
我有一个LINQ to Entities应用程序和一个数据库项目来管理针对.NET 4.0的VS 2010解决方案中的架构.目前,实体模型是从数据库中进行逆向工程的.其中一个表定义了一个datetime类型的列.数据库项目配置为使用SQL Server 2005兼容模式,因此它都可以正常部署.
我刚刚遇到一个问题,通过实体框架的更新语句似乎使用datetime2而不是datetime,这会导致异常,因为SQL 2005不支持该数据类型:
System.Data.UpdateException: An error occurred while updating the entries.
See the inner exception for details. ---> System.ArgumentException: The version
of SQL Server in use does not support datatype 'datetime2'.
Run Code Online (Sandbox Code Playgroud)
从堆栈跟踪显示错误似乎发生在:
System.Data.Mapping.Update.DynamicUpdateCommand
Run Code Online (Sandbox Code Playgroud)
我查看了所有SQL代码和实体代码,并确认datetime2没有引用(包括dbschema文件).我只能得出结论,数据类型是在实体框架生成的动态SQL查询中生成的.
我怎样才能确认或否认这一点,以及如何阻止它发生?实体框架不知道我已经要求db项目以2005兼容性模式为目标,并且我看不到一种方法来指出它正在查看的版本.为了它的价值,我在安装了2008 Express的机器上创建了这个项目,但我定期切换到另一台没有(并且还不能升级)的机器.
请参阅以下代码:
val names = Set("Mike", "Jack")
names += "Jeff"
Run Code Online (Sandbox Code Playgroud)
会有错误:
error: reassignment to val
Run Code Online (Sandbox Code Playgroud)
我在一些书中看到,它说+=实际上是一种方法,代码可以是:
val names = Set("Mike", "Jack")
names.+=("Jeff")
Run Code Online (Sandbox Code Playgroud)
如果+=是一种方法,为什么要分配"名称"?