小编Ral*_*ang的帖子

在C++中将main()声明为友元函数

我有一个类,我只希望客户为每个进程创建一个对象.而不是单身,更好的方法(我相信)是告诉客户只在main()中创建它们.因此,自然的强制执行是将构造函数private和main()作为朋友.

它以这种方式工作:

class A { friend int main(int, char**); A() {} };
int main(int, char **) { A a; }
Run Code Online (Sandbox Code Playgroud)

但是当我需要将A类放在命名空间中时它会中断:

namepace ns { class A { friend int main(int, char**); A() {} }; }
int main(int, char **) { ns::A a; }
Run Code Online (Sandbox Code Playgroud)

问题是范围界定:编译器现在认为

friend int main 
Run Code Online (Sandbox Code Playgroud)

表示命名空间ns中名为main()的函数.所以真正的main()变得无关紧要.

所以问题是:如何解决这个问题?当然,我必须将A类放在命名空间中.

c++

6
推荐指数
2
解决办法
1891
查看次数

具有libaio性能问题的Linux异步IO

我正在尝试使用Linux libaio来优化服务器应用程序中的IO性能.我相信我已经完成了所有必要的工作(使用O_DIRECT,将缓冲区与内存页面对齐...).我期待立即调用io_submit返回,但是一个简单的测试显示它实际需要大约80微秒才能在我的核心i7笔记本电脑上返回.我期待太多或我的测试程序有什么问题吗?(用g ++编译--std = c ++ 0x -laio)

#include <unistd.h>
#include <fcntl.h>
#include <libaio.h>
#include <errno.h>
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <chrono>

// Open the file for write, return the file descriptor
int open_write(char const* file)
{
  int fd = open(file, O_DIRECT|O_CREAT|O_WRONLY, S_IRWXU|S_IRWXG|S_IROTH);
  if (fd < 0) {
    perror("open_write");
    exit(1);
  }
}

// Make a buffer of _size_ byte, fill with 'a', return the buffer, it should be aligned to memory page
void* make_write_buffer(size_t size)
{
  void* buf …
Run Code Online (Sandbox Code Playgroud)

c++ linux performance asynchronous aio

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

CMake:如何在Linux中将目标/文件打包到多个软件包中?

我正在一个项目上生成大量可执行文件,库和配置,它们需要打包到不同的程序包中进行部署。问题是,包含这些目标/文件不是相互排斥的。一个目标/文件可以属于多个软件包。

我正在使用CMake 2.8.9并尝试使用CPack。我知道安装类型是可行的。但是我的平台是Ubuntu,因此在Archives / Debs上是可以接受的,它们似乎不支持。

对于组件/组/父组,似乎只能将一个目标/文件打包到一个组件/组中。

有什么办法吗?

谢谢

cmake

4
推荐指数
2
解决办法
3416
查看次数

在EXPECT_CALL中使用google mock的EXPECT_THAT?

我正在使用谷歌模拟.该文档说我们可以在EXPECT_CALL或ON_CALL中使用EXPECT_THAT,但是像这样的代码似乎没有编译:

EXPECT_CALL(obj, method(_, _)).Times(1).WillOnce(EXPECT_THAT(true, Eq(1)));
Run Code Online (Sandbox Code Playgroud)

我知道EXPECT_THAT是一个宏,所以它扩展到一些不应该出现在那里的语句.那么"在EXPECT_CALL中使用EXPECT_THAT"是什么意思呢?怎么做?

谢谢

c++ mocking gmock

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

使用NetMQ接收IObservable

我正在尝试编写一个典型的股票交易程序,它从netmq接收股票代码/订单/交易,将流转换为IObservable,并在WPF前端显示它们.我尝试使用async/await与NetMQ阻塞ReceiveString(假设我期待一些字符串输入),以便ReceiveString循环不会阻止主(UI)线程.由于我还是C#的新手,我在这篇文章中接受了Dave Sexton的回答:(https://social.msdn.microsoft.com/Forums/en-US/b0cf96b0-d23e-4461-9d2b-ca989be678dc/where -is-iasyncenumens-the-the -stestst-release?forum = rx)并试图写一些这样的例子:

using System;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using NetMQ;
using NetMQ.Sockets;
using System.Reactive;
using System.Reactive.Linq;

namespace App1
{
    class MainClass
    {
        // publisher for testing, should be an external data publisher in real environment
        public static Thread StartPublisher(PublisherSocket s)
        {
            s.Bind("inproc://test");
            var thr = new Thread(() => {
                Console.WriteLine("Start publishing...");
                while (true) {
                    Thread.Sleep(500);
                    s.Send("hello");
                }
            });
            thr.Start();
            return thr;
        }

        public static IObservable<string> Receive(SubscriberSocket s)
        {
            s.Connect("inproc://test");
            s.Subscribe("");
            return Observable.Create<string>( …
Run Code Online (Sandbox Code Playgroud)

c# zeromq system.reactive async-await netmq

3
推荐指数
1
解决办法
1189
查看次数

在Haskell中键入函数'floor'的错误

我有一个函数接受2个I n,x,并计算floor(log n/log x).这里n和x都非常有限,因此Int对我来说已经足够了.

func :: Int -> Int -> Int
func n x = floor (log . fromIntegral n / (log . fromIntegral x))

但是这里出现了ghci中的错误:

No instance for (RealFrac (a -> b))
  arising from a use of `floor' at p5_evenly_divide.hs:20:11-63
Possible fix: add an instance declaration for (RealFrac (a -> b))
In the expression:
    floor (log . fromIntegral n / (log . fromIntegral x))
In the definition of `func':
    func n x = floor (log . fromIntegral n / …
Run Code Online (Sandbox Code Playgroud)

floating-point int haskell

2
推荐指数
1
解决办法
1252
查看次数