我正在使用CMake来构建我的项目.我添加了一个使用Boost单元测试框架的单元测试二进制文件.这个二进制文件包含所有单元测试.我已经添加了由CTest运行的二进制文件:
ADD_EXECUTABLE( tftest test-main.cpp )
ENABLE_TESTING()
ADD_TEST( UnitTests tftest)
Run Code Online (Sandbox Code Playgroud)
但Visual Studio中的构建输出仅显示运行CTest的结果:
Start 1: UnitTests
1/1 Test #1: UnitTests ................***Failed 0.05 sec
0% tests passed, 1 tests failed out of 1
Run Code Online (Sandbox Code Playgroud)
这不是很有用,因为我看不出哪个测试失败了.如果我从命令行手动运行ctest,--verbose我得到Boost单元测试的输出,它告诉实际失败的是什么:
1: Test command: tftest.exe
1: Test timeout computed to be: 9.99988e+006
1: Running 4 test cases...
1: test-main.cpp(20): error in "sanity_check3": check 1 == 2 failed
1:
1: *** 1 failure detected in test suite "Master Test Suite"
1/1 Test #1: UnitTests ................***Failed 0.00 sec
Run Code Online (Sandbox Code Playgroud)
那么,我需要在CMakeLists.txt中进行哪些更改才能让CTest --verbose …
我来自C++背景,我和C#一起工作了大约一年.像许多其他人一样,我对于为什么确定性资源管理不是内置于语言中而感到困惑.我们没有确定性的析构函数,而是具有处置模式.人们开始怀疑是否通过他们的代码传播IDisposable癌症是值得的.
在我的C++偏见的大脑中,似乎使用带有确定性析构函数的引用计数智能指针是垃圾收集器的一个重要步骤,它需要您实现IDisposable并调用dispose来清理非内存资源.不可否认,我不是很聪明......所以我纯粹是想要更好地理解为什么事情就是这样.
如果修改了C#,那么:
对象是引用计数.当对象的引用计数变为零时,将在对象上确定性地调用资源清理方法,然后将该对象标记为垃圾回收.垃圾收集在将来某个非确定性时间发生,此时回收内存.在这种情况下,您不必实现IDisposable或记得调用Dispose.如果要释放非内存资源,则只需实现资源清理功能.
编辑:从目前为止的评论,这是一个坏主意,因为
我认为第一名是有效的,但使用弱引用很容易处理第二名.
那么速度优化是否超过你的缺点:
如果您的资源清理机制是确定性的并且内置于该语言中,则可以消除这些可能性.
在VS2010中,C++项目在x64/Release中链接时遇到此错误:
错误LNK2038:检测到'_ITERATOR_DEBUG_LEVEL'不匹配:值'0'与值'1'不匹配
所有其他配置/平台组合链接都很好.所以静态库是在_ITERATOR_DEBUG_LEVEL设置为0的情况下构建的.依赖于它的.dll以某种方式将_ITERATOR_DEBUG_LEVEL设置为1.我试图弄清楚这意味着什么,所以我可以弄清楚如何关闭它!
我在谷歌搜索时发现的唯一引用此错误的是_ITERATOR_DEBUG_LEVEL与值0和2的冲突.这表示尝试将释放与调试联系起来.但我确信这不是这种情况.
我有一个动态链接到Python解释器的C++应用程序.我希望能够从特定目录导入python模块.我想修改我的进程的PYTHONPATH,以便sys.path将包含我添加到PYTHONPATH的路径.根据这个文档,这似乎是它的工作方式:
http://docs.python.org/c-api/intro.html#embedding-python
但是,当我从Python-land打印sys.path时,它具有PYTHONPATH的原始内容而不是我设置的内容.这是我正在做的一个例子(使用Boost.Python):
int main(int argc, char* argv[])
{
_putenv_s("PYTHONPATH", "C:\\source\\\\modules");
Py_Initialize();
object main = import("__main__");
object global = (main.attr("__dict__"));
exec("import sys\nprint sys.path"), global, global);
}
Run Code Online (Sandbox Code Playgroud)
PS - 我知道还有其他方法可以实现我的目标,但这不是我所要求的.我想知道为什么Py_Initialize()在设置sys.path时不使用PYTHONPATH的当前值.或许我误解了它应该如何运作?
我有一个这样的课:
public ref class Test
{
public:
property int MyProperty;
};
Run Code Online (Sandbox Code Playgroud)
这有效.现在我想将MyProperty的实现移动到CPP文件.我得到编译器错误,我执行此操作时已定义属性:
int Test::MyProperty::get() { return 0; }
Run Code Online (Sandbox Code Playgroud)
这个的正确语法是什么?
在为Win 8 Metro控件编写自定义ControlTemplate(XAML)时,我们需要使用VisualStateManager根据VisualState转换更新控件.我在MSDN上看到了下面的示例,但是我找不到VisualStateGroup"CommonStates"的记录位置以及除"PointerOver"和"Normal"之外定义的其他VisualStates?您是否需要深入了解SDK以找到按钮的默认ControlTemplate?如果是的话,在哪里?
<ControlTemplate TargetType="Button">
<Grid >
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<!--Take one half second to transition to the PointerOver state.-->
<VisualTransition To="PointerOver"
GeneratedDuration="0:0:0.5"/>
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal" />
<!--Change the SolidColorBrush, ButtonBrush, to red when the
Pointer is over the button.-->
<VisualState x:Name="PointerOver">
<Storyboard>
<ColorAnimation Storyboard.TargetName="ButtonBrush"
Storyboard.TargetProperty="Color" To="Red" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid.Background>
<SolidColorBrush x:Name="ButtonBrush" Color="Green"/>
</Grid.Background>
</Grid>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud) 在Visual Studio中,我生成了一个普通的旧Win32应用程序,并剥离了所有资源并生成了代码,因此我的应用程序包括以下内容:
#include "stdafx.h"
#include "IcoTest.h"
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
::MessageBox( NULL, L"Testing", L"Test", MB_OK );
}
Run Code Online (Sandbox Code Playgroud)
当我运行该应用程序时,这是我看到的:
所以问题是我可以在任务栏中更改该默认应用程序图标吗?如果是这样,需要添加什么代码来做到这一点?
编辑:
这是我所做的,这类工作,但并不理想。新图标显示正常,但是Vista中的任务栏预览窗口不起作用,系统菜单也不起作用,因此我暂时不讨论它。
HWND CreateDummyWindow(HINSTANCE hInstance, int iconId, LPCTSTR taskbarTitle)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = DefWindowProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(iconId));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = 0;
wcex.lpszMenuName = 0;
wcex.lpszClassName = taskbarTitle,
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(iconId));
ATOM …Run Code Online (Sandbox Code Playgroud) 我为Solaris 8 sparc构建了gcc 4.6.1.我正在编译一些使用boost :: lexical_cast(boost 1.48)的代码,我收到此错误:
boost/math/special_functions/sign.hpp: In function 'int boost::math::detail::signbit_impl(T, const boost::math::detail::native_tag&)'
error: 'signbit' is not a member of 'std'
Run Code Online (Sandbox Code Playgroud)
(fpclassify也有类似的错误,isfinite,isnormal,isinf,isnan)
我查看了cmath标头,它根据是否定义了_GLIBCXX_USE_C99_MATH有条件地定义了std :: signbit.我运行了cpp -dM,我发现没有定义_GLIBCXX_USE_C99_MATH.有没有办法启用C99支持?我是否必须重建libc或者这个平台太旧了?我不在我的元素中,所以任何关于这项工作的指导都会很棒.
我一直在看XAML Images示例项目和XAML来加载该示例中的图像如下所示:
<Image Source="Assets/image1.jpg"/>
Run Code Online (Sandbox Code Playgroud)
但是,在我自己的项目中,我发现我无法加载任何类似的图像.如果我尝试在处理ImageFailed时获得E_NETWORK_ERROR.相反,我发现我必须像这样使用ms-appx:///前缀:
<Image Source="ms-appx:///Assets/image1.jpg"/>
Run Code Online (Sandbox Code Playgroud)
然后它工作.有什么想法我的项目与导致这种情况的样本有什么不同?
我有一个Windows模板库CListViewCtrl在报告模式(所以有一个2列的标题)与所有者数据集.此控件显示搜索结果.如果没有返回结果,我想在列表框区域中显示一条消息,表明没有结果.是否有捷径可寻?你知道任何现有的控件/示例代码(我找不到任何东西).
否则,如果我将控件子类化以提供此功能,那么这将是一个好方法吗?
我希望能够确定特定域控制器是否为只读.我知道我可以做这样的事情来得到一个可写的DC:
using( Domain d = Domain.GetCurrentDomain() )
{
DomainController dc = d.FindDomainController(
"mysitename", LocatorOptions.WriteableRequired);
}
Run Code Online (Sandbox Code Playgroud)
但是给定一个DomainController对象是否有办法确定该DC是否可写?
我问的原因是我想尝试选择一个首选的域控制器1.可写2.在我的站点和3.全局目录.似乎找不到具有所有这些属性的服务器的好方法.
Apple的Swift编程语言自动执行内存管理.他们是使用垃圾收集器还是更像自动引用计数(ARC)?我在他们的文档中找不到任何提及它的内容.