小编Bea*_*ker的帖子

是否有更好的方法在标头中用C++表示嵌套命名空间

我从C++切换到Java和C#,并认为命名空间/包的使用在那里(结构良好)更好.然后我回到C++并试图以相同的方式使用命名空间,但在头文件中所需的语法是可怕的.

namespace MyCompany
{
    namespace MyModule
    {
        namespace MyModulePart //e.g. Input
        {
            namespace MySubModulePart
            {
                namespace ...
                {
                    public class MyClass    
Run Code Online (Sandbox Code Playgroud)

以下内容对我来说也很奇怪(避免深度缩进):

namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
     public class MyClass
     {
Run Code Online (Sandbox Code Playgroud)

是否有更短的方式来表达上述事情?我错过了类似的东西

namespace MyCompany::MyModule::MyModulePart::...
{
   public class MyClass
Run Code Online (Sandbox Code Playgroud)

更新

好吧,有人说Java/C#和C++中的使用概念是不同的.真?我认为(动态)类加载不是命名空间的唯一目的(这是一个非常技术性的推理视角).为什么我不应该将它用于可读性和结构化,例如想到"IntelliSense".

目前,命名空间与您可以在其中找到的内容之间没有逻辑/粘合剂.Java和C#做得更好......为什么要包含<iostream>和拥有命名空间std?好吧,如果你说的逻辑应该依靠头部以包括,为什么#包括不使用的"智能感知"友好的语法像#include <std::io::stream><std/io/stream>?我认为与Java/C#相比,缺省库中缺少的结构化是C++的一个弱点.

如果狂热冲突的唯一性是一个Point(这也是C#和Java的一个点),一个好主意是使用项目名称或公司名称作为命名空间,你不这么认为吗?

一方面它说C++是最灵活的...但每个人都说"不要这样做"?在我看来,C++可以做很多事情,但是在很多情况下,与C#相比,即使是最简单的事情也会有一种可怕的语法.

更新2

大多数用户认为创建比两个级别更深的嵌套是无稽之谈.好的,那么Win8开发中的Windows :: UI :: Xaml和Windows :: UI :: Xaml :: Controls :: Primitives名称空间呢?我认为微软对名称空间的使用是有道理的,它确实比仅仅2级更深.我认为更大的库/项目需要更深层次的嵌套(我讨厌像ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace这样的类名...那么你也可以将所有东西放到全局命名空间中.)

更新3 - …

c++ syntax namespaces

85
推荐指数
6
解决办法
5万
查看次数

声明类或接口的IDisposable?

从以下情况开始:

public interface ISample
{
}

public class SampleA : ISample
{
   // has some (unmanaged) resources that needs to be disposed
}

public class SampleB : ISample
{
   // has no resources that needs to be disposed
}
Run Code Online (Sandbox Code Playgroud)

SampleA类应实现用于释放资源的接口IDisposable.您可以通过两种方式解决此问题:

1.将所需的接口添加到SampleA类:

public class SampleA : ISample, IDisposable
{
   // has some (unmanaged) resources that needs to be disposed
}
Run Code Online (Sandbox Code Playgroud)

2.将其添加到接口ISample并强制派生类来实现它:

public interface ISample : IDisposable
{
}
Run Code Online (Sandbox Code Playgroud)

如果将其放入界面,则强制任何实现实现IDisposable,即使它们没有任何可处置的内容.另一方面,很清楚地看到接口的具体实现需要一个dispose/using块,而你不需要像IDisposable一样进行清理.在两种方式中可能会有更多的优点/缺点...为什么你建议使用一种优先于另一种方式?

.net c# dispose idisposable

45
推荐指数
4
解决办法
1万
查看次数

在接口类中声明抽象信号

当实现类已经从QObject/QWidget中获取时,如何在抽象类/接口中声明Qt信号?

class IEmitSomething
{
   public:
     // this should be the signal known to others
     virtual void someThingHappened() = 0;
}

class ImplementEmitterOfSomething : public QWidget, public IEmitSomething
{
     // signal implementation should be generated here
     signals: void someThingHappended();
}
Run Code Online (Sandbox Code Playgroud)

c++ qt qt-signals

32
推荐指数
3
解决办法
2万
查看次数

这是一种更好的方法来启动/调用事件而无需在C#中进行空检查吗?

我见过的大多数代码都使用以下方式来声明和调用事件触发:

public class MyExample
{
    public event Action MyEvent; // could be an event EventHandler<EventArgs>, too

    private void OnMyEvent()
    {
        var handler = this.MyEvent; // copy before access (to aviod race cond.)
        if (handler != null)
        {
            handler();
        }
    }

    public void DoSomeThingsAndFireEvent() 
    {
        // ... doing some things here
        OnMyEvent();
    }
 }
Run Code Online (Sandbox Code Playgroud)

甚至ReSharper也会按照上面提到的方式生成一个调用方法.

为什么不这样做:

public class MyExample
{
    public event Action MyEvent = delegate {}; // init here, so it's never null

    public void DoSomeThingsAndFireEvent() 
    {
        // ... doing …
Run Code Online (Sandbox Code Playgroud)

.net c# resharper events event-handling

12
推荐指数
3
解决办法
1108
查看次数

如何在Autofac注册中调用异步方法?

我想awaitable async在注册过程中调用一个方法,如下所示:

// builder variable contains Autofac ContainerBuilder
builder.Register(
    (async (context, parameters) => // need async here
        {
            var someClass = new SomeClass(context.Resolve<ISomeDependency>());
            await someClass.SomeAsyncInitMethod(); // need to await result
            return someClass;
        })).As<ISomeClass>().SingleInstance();
Run Code Online (Sandbox Code Playgroud)

SomeClass实现ISomeClass为服务.重要的部分是someClass.SomeAsyncInitMethod()电话.这是async因为,因此我需要在await这里将async关键字放入Register方法中.但现在Autofac认为这会返回一个Task<SomeClass>不可注册的Service ISomeClass.

如何实现上述注册SomeClassISomeClass等待时async的init方法?

.net c# asynchronous factory autofac

11
推荐指数
2
解决办法
3481
查看次数

如何存储CMake构建设置

在尝试构建使用CMake的项目时,通常会有许多swiches启用/禁用.

如何存储某些用户创建的构建设置,以使构建在另一台机器上可重现?是否有某种导出功能或者您只是复制构建(缓存)文件夹?

build cmake binary-reproducibility

10
推荐指数
1
解决办法
4595
查看次数

强制msbuild构建一个在解决方案配置中未选中的项目

我在命令行使用msbuild来构建生成的解决方案文件:

msbuild /p:Configuration=Release /p:Platform=Win32 build\zlib\vc-9.0\x86\zlib.sln
Run Code Online (Sandbox Code Playgroud)

问题是cmake生成的解决方案有一个项目INSTALL,它不是默认构建的.

minigzip:
  Die Datei "c:\Library\build\zlib\vc-9.0\x86\minigzip.tmp_Release_Win32.vcproj
  " wird gelöscht.
ALL_BUILD:
  Die Datei "c:\Library\build\zlib\vc-9.0\x86\ALL_BUILD.tmp_Release_Win32.vcpro
  j" wird gelöscht.
INSTALL:
  The project "INSTALL" is not selected for building in solution configuration
  "Release|Win32".
Done Building Project "c:\Library\build\zlib\vc-9.0\x86\zlib.sln" (default targ
ets).


Build succeeded.
    0 Warning(s)
    0 Error(s)
Run Code Online (Sandbox Code Playgroud)

如何在不手动打开灵魂的情况下强制构建目标INSTALL并设置配置的复选框?

一种解决方案是直接调用vcproj文件(就像我在这里做的那样)

msbuild /p:Configuration=Release /p:Platform=Win32 build\zlib\vc-9.0\x86\INSTALL.vcproj
Run Code Online (Sandbox Code Playgroud)

但这会打印警告

Microsoft (R)-Buildmodul, Version 3.5.30729.6387
[Microsoft .NET Framework, Version 2.0.50727.6400]
Copyright (C) Microsoft Corporation 2007. Alle Rechte vorbehalten.

Build started 06.07.2013 17:07:57.
Project "c:\Library\build\zlib\vc-9.0\x86\INSTALL.vcproj" on node 0 (default …
Run Code Online (Sandbox Code Playgroud)

msbuild cmake visual-studio

9
推荐指数
2
解决办法
5350
查看次数

在Qt中允许将信号连接到具有较少参数的插槽?

打电话有效吗?

QObject::connect(a, SIGNAL(somesig(someparam)), b, SLOT(someslot()));
Run Code Online (Sandbox Code Playgroud)

没有参数?它似乎工作(没有抛出运行时异常),但我在文档中找不到引用.我发现只有someslot有一个默认参数才有可能.在这种情况下它是有效的.但是我的方法someslot没有与默认值相同的参数设置(示例中没有参数).

那么似乎可以将信号连接到参数较少的插槽?

qt signals slot

9
推荐指数
1
解决办法
3354
查看次数

与边距分组的WPF ListView样式问题

在WPF中使用ListView 的分组功能时,样式左侧有一个小的边距.

具有分组问题的ListView示例(边距):

ListView,按名称分组

没有分组的ListView示例(在分组列表中需要相同样式的项目):

ListView,没有分组

题:

如何删除边距/填充?分组列表中的(选定)项应填充与未分组列表中相同的空间.

更新:

            <ListView Margin="20,0,0,0" ItemsSource="{Binding ItemsView}" SelectedItem="{Binding SelectedItem}" IsSynchronizedWithCurrentItem="True"  SelectionMode="Single" BorderThickness="0" Background="Transparent">
                <ListView.GroupStyle>
                    <GroupStyle>
                        <GroupStyle.HeaderTemplate>
                            <DataTemplate DataType="data:Item">
                                <DockPanel HorizontalAlignment="Stretch">
                                    <TextBlock Text="{Binding Name}" FontWeight="Bold" Margin="0,5,5,5" />
                                    <Separator  />
                                </DockPanel>
                            </DataTemplate>
                        </GroupStyle.HeaderTemplate>
                    </GroupStyle>
                </ListView.GroupStyle>
                <ListView.ItemTemplate>
                    <DataTemplate DataType="data:Item">
                        <TextBlock Margin="10,10,10,10" Text="{Binding Name}" />
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
Run Code Online (Sandbox Code Playgroud)

.net wpf listview

8
推荐指数
1
解决办法
1145
查看次数

Caliburn.Micro屏幕和导体生命周期文档

有没有人知道Caliburn.Micro屏幕/导体生命周期概述的来源?例如,序列图/流程图描述了它们的调用顺序/依赖关系以及它们被调用时的条件?到目前为止,我主要使用OnViewLoaded,但我想知道哪些是第二次调用(再次显示)等.我还没有找到关于屏幕生命周期的好文档.

是的,我知道它是开源的,我可以阅读源代码或调试(我现在正在做的事情)...只是认为这个要求对于使用Caliburn.Micro来说有点基础并且必须有已完成的事情,我不需要自己创建概述.也许答案也可能对其他人有所帮助.;-)

例如,当从Conductor.Collection.OneActive中获取时,有以下(甚至更多)方法似乎在生命周期中起作用并且可以重载:

protected virtual void OnInitialize()

protected virtual void OnActivate()

protected virtual void OnActivationProcessed(IScreen item, bool success)

protected virtual void OnDeactivate(bool close)

protected virtual void OnViewAttached(object view, object context)

protected virtual void OnViewLoaded(object view)

protected virtual void OnViewReady(object view)
Run Code Online (Sandbox Code Playgroud)

到目前为止我看到的这似乎是订单(应用程序启动退出):

  1. OnViewAttached
  2. OnInitialize
  3. OnActivate
  4. OnViewReady
  5. OnViewLoaded
  6. OnActivationProcessed
  7. OnDeactivate

但每种方法的要点是什么?例如,何时设置了datacontext,样式模板应用于视图并准备显示?视图何时显示?(ViewReady和ViewLoaded之间的区别?)

c# lifecycle caliburn.micro

7
推荐指数
1
解决办法
1006
查看次数