在类库项目中,我将项目属性的"调试"选项卡上的"启动操作"设置为"启动外部程序"(在本例中为NUnit).我想在这个程序启动的环境中设置一个环境变量.我该怎么做?(它甚至可能吗?)
编辑:
它是一个影响所有.NET应用程序的环境变量(COMplus_Version,它设置运行时版本),因此在系统范围内设置它实际上不是一个选项.
作为一种解决方法,我只是强迫NUnit通过设置它来启动正确的.NET版本(2.0)nunit.exe.config,但不幸的是,这也意味着我的所有.NET 1.1单元测试现在也在.NET 2.0中运行.我应该只是制作可执行文件的副本,以便它可以拥有自己的配置文件......
(我保持问题公开(不接受答案)万一有人确实发现了怎么样(毕竟它可能对其他目的有用......))
考虑一下java 8代码片段:
public class Generics {
public static <V, E extends Exception> V f(CheckedCallable1<V, E> callable) throws E {
return callable.call();
}
public static <V, E extends Exception> V g(CheckedCallable2<V, E> callable) throws E {
return callable.call();
}
public static void main(String[] args) {
f(() -> 1);
g(() -> 1);
}
}
interface Callable<V> {
V call() throws Exception;
}
interface CheckedCallable1<V, E extends Exception> {
V call() throws E;
}
interface CheckedCallable2<V, E extends Exception> extends Callable<V> {
@Override …Run Code Online (Sandbox Code Playgroud) 我正在开发一个相当大的开源RTS游戏引擎(Spring).我最近添加了一堆可由Lua调用的新C++函数,我想知道如何最好地记录它们,同时也激发人们为许多现有的Lua标注编写/更新文档.
所以我认为如果我最初可以将文档编写为C++函数附近的doxygen注释可能会很好 - 这很容易,因为函数体明确定义了函数的功能.但是,我希望游戏开发人员使用引擎来改进文档,因为引擎通常对git(我们使用的VCS)或C++几乎一无所知.
因此,如果有一种方法可以自动生成C++文件中的apidocs,而且还有一个类似wiki的Web界面,允许更广泛的受众更新注释,添加示例等,这将是理想的.
所以我想知道,是否存在一个web工具,它集成了doxygen样式格式,这些注释的wiki编辑(最好不允许编辑源文件的任何其他部分)和git?(将通过Web界面更改的注释提交到特殊分支)
然后我们的开发人员可以不时地合并这个分支,然后将改进添加到主分支,同时开发人员对文档的任何改进都会在这个Web工具上结束,只需将master分支合并到这个特殊的科.
我还没有找到任何东西,怀疑这个具体存在的东西,所以欢迎任何建议!
我自己确信,在一个项目中,我正在研究有符号整数是大多数情况下的最佳选择,即使其中包含的值永远不会是负数.(更简单的循环反转,更少的错误机会等,特别是对于只能保持0和20之间的值的整数,无论如何.)
出现问题的大多数地方是std :: vector的简单迭代,过去常常是一个数组,之后变为std :: vector.所以这些循环通常如下所示:
for (int i = 0; i < someVector.size(); ++i) { /* do stuff */ }
Run Code Online (Sandbox Code Playgroud)
由于此模式经常使用,因此编译器警告垃圾邮件的数量与签名和未签名类型之间的此比较往往隐藏更多有用的警告.请注意,我们肯定没有带有多个INT_MAX元素的向量,并注意到目前为止我们使用了两种方法来修复编译器警告:
for (unsigned i = 0; i < someVector.size(); ++i) { /*do stuff*/ }
Run Code Online (Sandbox Code Playgroud)
这通常有效但如果循环包含任何代码,如'if(i-1> = 0)......'等,可能会默默地中断.
for (int i = 0; i < static_cast<int>(someVector.size()); ++i) { /*do stuff*/ }
Run Code Online (Sandbox Code Playgroud)
这种变化没有任何副作用,但它确实使循环的可读性降低了很多.(而且它打字更多.)
所以我提出了以下想法:
template <typename T> struct vector : public std::vector<T>
{
typedef std::vector<T> base;
int size() const { return base::size(); }
int max_size() const { return base::max_size(); }
int …Run Code Online (Sandbox Code Playgroud) 我正在开发一个大的.NET 1.1项目,并且希望升级它,主要是为了能够使用更好的工具,如Visual Studio 2008,还因为.NET中的新功能和少量的bug. 2.0框架.
该项目包含VB.NET的大部分内容,但C#中也有部分内容.它是一个Windows窗体应用程序,使用各种第三方控件.使用.NET远程处理,富客户端与服务器进程通信,该进程与MSSQL 2000数据库连接.
如果我们决定进行升级,我们可以期待什么样的问题?
我记得有一些方法/属性直接呼吁之间的差异的DataTable类,并在该相同名称的方法/属性DataTable.Rows财产.(可能是我读过这个的RowCount/Count属性.)不同之处在于它们中的一个忽略了DataRow.RowState,而另一个则尊重/使用它.
在这个特殊情况下,我想知道DataTable.Clear和DataTable.Rows.Clear之间的区别.我可以想象其中一个实际上删除了所有行,另一个只是将它们标记为已删除.
所以我的问题是,两种Clear方法之间是否有区别,如果有,那有什么区别?
(哦,这是针对.NET 1.1顺便说一句,以防语义从一个版本变为另一个版本.)
我当时正在修复 .NET 2.0 应用程序中的异常处理,我偶然发现了Application.ThreadException的一些奇怪问题。
我想要的是能够捕获 GUI 元素背后的事件的所有异常(例如,button_Click 等)。然后,我想过滤这些“致命性”异常,例如,对于某些类型的异常,应用程序应该继续运行,对于其他类型的异常,应用程序应该退出。
在另一个 .NET 2.0 应用程序中,我了解到,默认情况下,只有在调试模式下,异常才会真正留下 Application.Run 或 Application.DoEvents 调用。在发布模式下,这种情况不会发生,并且必须使用 Application.ThreadException 事件“捕获”异常。
然而现在,我注意到Application.ThreadException事件的ThreadExceptionEventArgs中传递的异常对象始终是异常链中最里面的异常。出于日志记录/调试/设计目的,我确实想要整个异常链。确定哪个外部系统失败并不容易,例如当您刚刚处理 SocketException 时:当它被包装为 NpgsqlException 时,那么至少您知道这是数据库问题。
那么,如何从该事件中获取整个异常链呢?是否有可能,或者我是否需要以另一种方式设计异常处理?
请注意,我确实有一个使用Application.SetUnhandledExceptionMode 的解决方法,但这远非理想,因为我必须滚动自己的消息循环。
编辑:为了防止更多错误,GetBaseException() 方法不会执行我想要的操作:它只返回最里面的异常,而我唯一已经拥有的是最里面的异常。我想得到最外面的异常!
我想知道下面的模式是什么,如果它有一个名字.
目的
存储与object(MyObject)关联的数据,但该数据对于处理该对象的接口的实现是私有的.对象的客户端没有业务查看此数据.
备择方案
一些替代方案是
WeakHashMap<MyObject, FooApiMyObjectAttachment>维护在接口的实现,MyObject 和子类.代码示例
public interface MyApi {
void doSomething(MyObject x);
}
public class MyObject {
public interface Attachment {} // empty interface, type bound only
private Attachment attachment;
public void setAttachment(Attachment attachment) {
this.attachment = attachment;
}
public <T extends Attachment> T getAttachment(Class<T> type) {
return type.cast(attachment);
}
}
class FooApiMyObjectAttachment implements MyObject.Attachment {
Foo foo; // some data that one MyApi implementer `foo' wants to …Run Code Online (Sandbox Code Playgroud) 如何使用Cake构建系统,现在使用AUX_SOURCE_DIRECTORY扫描源文件,在同一目录中扫描头文件,最好使用类似的命令?
我还没有在文档中找到一种简单的方法,所以我现在有一个糟糕的bash脚本来后处理我的(CodeBlocks)项目文件......
我的基类:
class Item
{
protected:
int count;
string model_name;
int item_number;
public:
Item();
void input();
}
Run Code Online (Sandbox Code Playgroud)
我的派生类:
class Bed : public Item
{
private:
string frame;
string frameColour;
string mattress;
public:
Bed();
void input();
}
Run Code Online (Sandbox Code Playgroud)
现在我所有的输入函数都试图输出正在使用的方法:
void Item::input()
{
cout<<"Item input"<<endl;
}
void Bed::input()
{
cout<<" Bed Input"<<endl;
}
Run Code Online (Sandbox Code Playgroud)
当我在main中调用函数时,我想使用派生类输入,但目前项输入是.
主要:
vector<Item> v;
Item* item;
item= new Bed;
v.push_back(*item);
v[count].input();
count++;
Run Code Online (Sandbox Code Playgroud)
我已经按照我所拥有的书中的方法进行了操作,但我想我可能会对如何创建存储在向量中的新对象感到困惑.
任何帮助都会很棒,谢谢Hx
.net ×3
c++ ×3
java ×2
winforms ×2
c# ×1
cmake ×1
codeblocks ×1
coding-style ×1
debugging ×1
deprecated ×1
doxygen ×1
exception ×1
generics ×1
git ×1
inheritance ×1
java-8 ×1
lambda ×1
oop ×1
polymorphism ×1
stl ×1
unsigned ×1
vb.net ×1
vector ×1
wiki ×1