小编O. *_*sti的帖子

C ++钻石问题-如何仅一次调用基本方法

我在C ++中使用多重继承,并通过显式调用基本方法来扩展基本方法。假定以下层次结构:

     Creature
    /        \
 Swimmer    Flier
    \        /
       Duck
Run Code Online (Sandbox Code Playgroud)

对应于

     Creature
    /        \
 Swimmer    Flier
    \        /
       Duck
Run Code Online (Sandbox Code Playgroud)

现在,这带来了一个问题-调用duck的print方法将调用其各自的基本方法,所有这些方法都依次调用该Creature::print()方法,因此最终被两次调用-

I'm a creature
I can fly
I'm a creature
I can swim
I'm a duck
Run Code Online (Sandbox Code Playgroud)

我想找到一种方法来确保基本方法仅被调用一次。与虚拟继承的工作方式类似(在第一次调用时调用基本构造函数,然后仅在来自其他派生类的后续调用中为其分配一个指针)。

是否有一些内置方法可以做到这一点,还是我们需要依靠自己实现?

如果是这样,您将如何处理?

这个问题并非特定于打印。我想知道是否有一种机制可以扩展基本方法和功能,同时保持调用顺序并避免出现钻石问题。

我现在知道,最突出的解决方案是添加辅助方法,但是我只是想知道是否存在“更清洁”的方法。

c++ multiple-inheritance diamond-problem

37
推荐指数
6
解决办法
3874
查看次数

OWIN Web API CancellationToken没有被调用

我正在将C#Web-Api与作为Windows服务托管的Owin一起使用,以公开读卡器实用程序。

我正在尝试使用服务器发送事件。客户端发送一个打开流的请求,并且我想在关闭流时执行逻辑(即用户关闭浏览器或调用eventSource.close()

看起来像这样:

public class CardReaderController: ApiController
{
    static ConcurrentDictionary<int, Connection> connections = new ConcurrentDictionary<int, Connection>();
    static CardReader cardReader = CardReader.Instance;

    CardReaderController() 
    {
        cardReader.OnCardRead += OnCardRead;
    }

    static void OnDisconnect(int id)
    {
        connections.TryRemove(id, out var connection);
        connection.Writer.Close();
    }

    static void OnCardRead(string cardData)
    {
        foreach(var connection in connections.Values)
            connection.Writer.WriteLine("data: " + cardData + "\n")
    }

    [HttpGet]
    public HttpResponseMessage Events(CancellationToken onDisconnect) 
    {
        ...
        int id = Request.GetHashCode();
        var response = Request.CreateResponse();
        onDisconnect.Register(() => OnDisconnect(id));

        Response.Content = new PushStreamContent((stream, content, context) …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous server-sent-events asp.net-web-api cancellation-token

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

在客户端编译 scss 以保存在网络上

我已经看到了这个使用 css 制作动画星星背景的例子,并注意到在这种情况下编译的 css 明显更小,因为 sass 在循环中生成了一千颗星星。

// n is number of stars required
@function multiple-box-shadow ($n) 
  $value: '#{random(2000)}px #{random(2000)}px #FFF'
  @for $i from 2 through $n
    $value: '#{$value} , #{random(2000)}px #{random(2000)}px #FFF'

  @return unquote($value)
Run Code Online (Sandbox Code Playgroud)

这让我想知道,有没有办法在客户端生成上述 css?网络带宽的节省会不会超过生成 css 的(微乎其微的)成本?

我找不到这种用例的示例,网络流量的压缩是否使这无关紧要?

我不一定要专门询问这个案例。更多关于带宽与计算时间的考虑(如果有的话)。对于ngFor在客户端使用更简洁的语法(如在 Angular 中)生成 HTML 的 js 框架,也可以这样说。

css compilation sass client-side-scripting network-traffic

5
推荐指数
2
解决办法
288
查看次数