小编sco*_*man的帖子

直接将序列化提升为char数组

Boost序列化文档断言,序列化/反序列化项目的方法是使用二进制/文本存档以及基础结构上的流.如果我不想将序列化数据用作std :: string,这可以正常工作,但我的目的是将其直接转换为char*缓冲区.如何在不创建临时字符串的情况下实现此目的?

解决了!对于想要一个例子的人:

char buffer[4096];

boost::iostreams::basic_array_sink<char> sr(buffer, buffer_size);  
boost::iostreams::stream< boost::iostreams::basic_array_sink<char> > source(sr);

boost::archive::binary_oarchive oa(source);

oa << serializable_object; 
Run Code Online (Sandbox Code Playgroud)

c++ serialization boost

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

配置Erlang以使用SSL

Erlang版本:R13B01

目前我正努力让Erlang使用SSL.编程部分很简单,但现在启动系统启用SSL不是.

遵循Erlang SSL文档:

1 - 制作start_ssl.rel文件

{release, {"OTP  APN 181 01","R13B01"}, {erts, "5.7.2"},
 [{kernel,"2.13.2"},
  {stdlib,"1.16.2"},
  {sasl,"2.1.6"},
  {os_mon,"2.2.2"},
  {ssl,"3.10.3"}]}.
Run Code Online (Sandbox Code Playgroud)

2 - 执行以下命令

1> systools:make_script("start_ssl",[]).
Run Code Online (Sandbox Code Playgroud)

根据文档,运行shell将输出此信息(此输出来自docs,而不是我的):

$ erl -boot /home/me/ssl/start_ssl
Erlang (BEAM) emulator version 5.0

Eshell V5.0  (abort with ^G)
1> whereis(ssl_server).
<0.32.0>
Run Code Online (Sandbox Code Playgroud)

但是,我收到了这个:

erl -boot start_ssl
Erlang R13B01 (erts-5.7.2) [source] [smp:2:2] [rq:2] [async-threads:0] [kernel-poll:false]
1> whereis(ssl_server).
undefined
2> 
Run Code Online (Sandbox Code Playgroud)

所以,就目前而言,剩下的步骤也是失败的.遗憾的是,网络上没有相同问题的文档或论坛帖子.

有小费吗?

erlang ssl

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

用于共享内存一致性的锁定机制

我正在开发一种机制,用于在Linux上使用共享内存在两个或多个进程之间交换数据.问题是需要一定程度的并发控制来维护共享内存本身的数据完整性,而且由于我的某些时刻我的进程可能被杀死/崩溃,常见的锁机制不起作用,因为它们可能会留下内存处于"锁定"状态并在死亡后立即使其他进程挂起等待锁被释放.

因此,做了一些研究我发现System V信号量有一个名为SEM_UNDO的标志,它可以在程序失败时恢复锁定状态,但这并不能保证工作.另一种选择是从可能使用共享内存的所有进程监视PID,并在发生了令人讨厌的事情时对它们进行一些控制,但我不确定这是否是解决我的问题的正确方法.

有任何想法吗??:)

编辑:为了便于说明,我们的应用程序需要某种具有最小延迟的IPC机制.所以,我对可以处理这个要求的机制持开放态度.

c linux posix locking shared-memory

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

模板模板总专业化

模板模板规范是这样的:

template < template < class > class T >
struct MyTemplate
{
};
Run Code Online (Sandbox Code Playgroud)

我该如何为这个模板创建一个全部(或部分)专业化?这可能吗?

c++ templates generic-programming

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

在gdb上漂亮的打印boost :: unordered_map

最近我开始在我的系统上使用优秀的boost :: unordered_map,但有一个缺点:我无法弄清楚如何检查其内容.在gdb上打印它会给我一个table_和一个buckets_,但是没有找到它们的位置.任何人都有这方面的线索?

c++ boost gdb

6
推荐指数
1
解决办法
4754
查看次数

关于实现GUI逻辑的架构技巧

所以我正在我正在这里工作的一个应用程序上实现类似svg编辑器的GUI.这些是其中需要的逻辑的一些示例:

  • 如果用户在画布上单击右键,则应创建一个新节点,后续节点应与一条线"链接",形成一个多边形
  • 如果用户点击节点上的左按钮,我应该将整个多边形集相应地移动到鼠标位置
  • 用户可以删除节点
  • 所选节点的颜色应不同
  • 用户可以通过按SHIFT并单击节点来选择多个节点

等等.

我已经实现了所有这些项目,但我不喜欢最终结果,主要是因为我不得不使用大量标志来操作状态(鼠标点击&&左键&&不移动?这样做),当然这代码可以更优雅.所以我研究了一下,然后选择了这些选项:

  • 管道模式:我将创建分别处理每个逻辑事件的类,并使用优先级顺序来提供首先要执行的操作/操作,以及事件如何传播到后续的管道项.

  • MVC:这是最常见的响应,但我现在如何使用它来使代码更干净对我来说非常模糊.

  • 状态机:这很好但是管理状态机的粒度会很复杂

所以我要求SO大师提供有关如何构建更好,更快乐的代码的技巧.

language-agnostic architecture design-patterns

6
推荐指数
1
解决办法
717
查看次数

在universal_time上使用时间面

在boost,创建时间方面格式化指定时间我们使用下面的内容:

boost::local_time::local_time_facet* facet = new boost::local_time::local_time_facet("%Y%m%d %H:%M:%S.%f");
std::stringstream date_stream;
date_stream.imbue(std::locale(date_stream.getloc(), facet));
date_stream << boost::local_time::local_microsec_clock::local_time(boost::local_time::time_zone_ptr());
Run Code Online (Sandbox Code Playgroud)

我如何做同样的事情,但使用通用时钟:

boost::posix_time::microsec_clock::universal_time()
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ datetime boost

5
推荐指数
1
解决办法
2326
查看次数

使用模板模板类参数作为参数

Modern C++ Design提供了以下示例:

template <class T> struct EnsureNotNull
{
    static void Check(T*& ptr)
    {
      if (!ptr) ptr = GetDefaultValue();
    }
};

template
<
   class T,
   template <class> class CheckingPolicy = EnsureNotNull,
   template <class> class ThreadingModel
>
class SmartPtr
  : public CheckingPolicy<T>
  , public ThreadingModel<SmartPtr>
{
...
  T* operator->()
  {
    typename ThreadingModel<SmartPtr>::Lock guard(*this);
    CheckingPolicy<T>::Check(pointee_);
    return pointee_;
  }
private:
  T* pointee_;
};
Run Code Online (Sandbox Code Playgroud)

我无法想象ThreadingModel模板将如何以一种它可以接受SmartPtr作为参数的方式构建,在我看来会发生一些疯狂的递归.这怎么可能?

编辑:

我试过Potatoswatter(抱歉lol)评论:

template <class SmartPtr> struct SingleThreadingModel
{
  class Lock
  {
    public: 
      Lock(SmartPtr&)
      {
      }
  };
};
Run Code Online (Sandbox Code Playgroud)

但它确实没用.

这是gcc给我的错误: …

c++ templates

5
推荐指数
1
解决办法
4989
查看次数

是否可以创建一个计算扩展项目数量的宏?

是否可以创建一个计算扩展项目数量的宏?

macro_rules! count {
    ($($name:ident),*) => {
        pub enum Count {
           $(
               $name = 1 << $i // $i is the current expansion index
            ),*
        }
    }
}

count!(A, B, C);
Run Code Online (Sandbox Code Playgroud)

macros rust

5
推荐指数
1
解决办法
1002
查看次数

如何在递归宏扩展中调用concat_idents?

我正在尝试创建一个宏来扩展一组名称并为结构定义字段:

macro_rules! expand {
  ($($name:ident),*) => {
     pub struct Test {
       $(
          concat_idents!(var_, $name) : Vec<$name>
        ),*
     }
  }
}
//fails
expand!(a,b,c);
Run Code Online (Sandbox Code Playgroud)

由于编译器无法识别concat_idents!为宏,因此失败.我该如何解决这个问题?

rust

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

boost::iostream::basic_array_sink/source 的长度

我用来做一些序列化的东西“正如它可以在这里看到的那样”。这工作得很好,但我不知道如何获取写入缓冲区的大小。我搜索了 boost 文档,显然除了自己构建接收器/源之外没有办法做到这一点?

谢谢

c++ boost

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

使C lib的一部分"私有"

我正在开发一个共享库,由于代码很大,我决定将它拆分为许多头文件和源文件,就像任何正常程序一样:).

问题是大多数这些标题都是供内部使用的,即我不希望它们可以从我的库外部访问.所以我想将它们全部移动到一个大的源文件中,并且只提供可见的标题.

这样做是个好主意吗?我应该担心能见度吗?

谢谢

c

0
推荐指数
1
解决办法
213
查看次数