我希望继承boost mpl :: vector中包含的一组类.这可能吗?
具体来说,我希望扩展test任意多个模板参数,作为mpl :: vector传递.
template<class T>
struct Slice
{
public:
virtual void foo(T v) const = 0;
};
struct A{};
struct B{};
template <class T1, class T2>
struct test : public Slice<T1>, public Slice<T2>
{
void foo(T1 a) const {std::cout<<"A"<<std::endl;}
void foo(T2 b) const {std::cout<<"B"<<std::endl;}
};
Run Code Online (Sandbox Code Playgroud)
如果我知道只有两个参数,那么我可以简单地写:
template <class mpl_vector_t >
struct test : public Slice<typename mpl::at<mpl_vector_t,mpl::int_<0> >::type >,
public Slice<typename mpl::at<mpl_vector_t,mpl::int_<1> >::type >
{
typedef typename mpl::at<mpl_vector_t,mpl::int_<0> >::type T1;
typedef typename mpl::at<mpl_vector_t,mpl::int_<1> >::type T2; …Run Code Online (Sandbox Code Playgroud) 我被要求为一组 Windows 机器(我认为是 XP)编写一个(非常)简单的程序 - 如此简单以至于语言的选择并不是真正的问题。但是,我希望能够分发可以直接在 Windows 机器上运行的二进制文件/脚本,而无需预先安装任何解释器或虚拟机。我正在 Linux 机器上开发,我不知道 Windows 支持哪些语言“开箱即用”。任何人都可以建议吗?
例如
到目前为止我能想到的唯一选择是
虽然我很高兴用 C++ 编写代码,但我想先检查我的语言选项。
还有一个问题,就是在精神上非常相似这里.不幸的是,这个问题没有引起太多反应 - 我想我会问一个更具体的问题,希望可以提出另一种方法.
我正在写一个二进制文件到std::cin(with tar --to-command=./myprog).二进制文件碰巧是一组浮点数,我想把数据放入std::vector<float>- 理想情况下是c ++方式.
我可以std::vector<char>很好地生成(感谢 这个答案)
#include <fstream>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
int
main (int ac, char **av)
{
std::istream& input = std::cin;
std::vector<char> buffer;
std::copy(
std::istreambuf_iterator<char>(input),
std::istreambuf_iterator<char>( ),
std::back_inserter(buffer)); // copies all data into buffer
}
Run Code Online (Sandbox Code Playgroud)
我现在想把我std::vector<char>变成一个std::vector<float>,大概是std::transform和一个执行转换的函数(a char[2]到a float,比方说).然而,我正在努力,因为我std::vector<float>将拥有一半的元素std::vector<char>.如果我可以以2的步幅进行迭代,那么我认为我会没事的,但从上一个问题来看,似乎我不能这样做(至少不是优雅的).
我正在实现一个消息传递算法.消息通过图形的节点传播,阻塞直到它们已经从(其他邻居)接收到足够的信息来发送消息.
如果我将每条消息放在自己的线程中并使用boost :: condition来暂停线程直到所有必需的信息都可用,那么该算法很容易编写.我创建了数千个线程,但大多数线程在任何时候都是活动的.这看起来效果很好.
我的问题是,当单元测试我发现如果我创建超过大约32705线程,我得到
未知位置(0):"Tree_test"中的致命错误:std :: exception:boost :: thread_resource_error
我不知道是什么原因造成的,或者如何解决这个问题.
似乎有很多可用的内存(每个线程只有两个指针 - 消息在它们之间传递的对象).
从这个问题:Linux中每个进程的最大线程数?我认为以下信息是相关的(虽然我真的不知道它有什么意思......)
~> cat /proc/sys/kernel/threads-max
1000000
Run Code Online (Sandbox Code Playgroud)
(我从60120增加了这个 - 我需要重启吗?)
~>ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time …Run Code Online (Sandbox Code Playgroud) 我一直在盯着谷歌搜索,但我看不到我做了什么.
我在32位机器上有一个工作项目.我刚刚将存储库拉到64位机器(这是项目的原始开发机器),我现在在尝试构建测试二进制文件时遇到以下链接错误
/usr/bin/ld: error: /usr/lib/libboost_test_exec_monitor-mt.a(unit_test_log.o): requires dynamic R_X86_64_PC32 reloc against 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_create(unsigned long, unsigned long, std::allocator<char> const&)' which may overflow at runtime; recompile with -fPIC
/usr/bin/ld: error: /usr/lib/libboost_test_exec_monitor-mt.a(unit_test_log.o): requires unsupported dynamic reloc 11; recompile with -fPIC
Run Code Online (Sandbox Code Playgroud)
我真的看不出我能改变什么.boost库直接从ubuntu存储库中提取.任何有线索的人.
我正在初始化数百万个以下类型的类
template<class T>
struct node
{
//some functions
private:
T m_data_1;
T m_data_2;
T m_data_3;
node* m_parent_1;
node* m_parent_2;
node* m_child;
}
Run Code Online (Sandbox Code Playgroud)
模板的目的是使用户能够选择float或double精确,其想法是by node<float>将占用更少的内存(RAM).
但是,当我切换double到float我的程序的内存占用时,并没有像我期望的那样减少.我有两个问题,
是否有可能编译器/操作系统保留的空间超过了我的浮动所需的空间(甚至可以将它们存储为双精度).如果是这样,我该如何阻止这种情况发生 - 我在使用g ++的64位机器上使用linux.
有没有一个工具可以让我确定所有不同类使用的内存量?(即某种内存分析) - 确保内存不会被我想到的其他地方搞砸.
我有通过rs-232接口(超声脉冲发生器 - 接收器)控制的硬件设备.我需要编写一个程序,将命令从我的计算机发送到设备.然而,不同寻常的是,该设备没有串行端口(DB-9 COM端口),而是具有RJ45插座(以太网插座).该设备随附一个适配器,用于将设备上的以太网端口连接到串行电缆,以便与计算机进行通信.
不幸的是我的电脑没有串口 - 只有一个以太网端口.如果可能的话,我想取消适配器并使用以太网电缆将计算机直接连接到设备.这在物理上是可能的 - 但我不知道如何转换消息协议?例如,我的设备没有用于打开tcp套接字的ip地址?
到目前为止,我一直在使用Boost.asio(在Ubuntu盒子上)通过tcp套接字将消息流发送到支持tcp的其他设备.如果可能的话,我想继续使用Boost.Asio库 - 因为它是跨平台的.我真的不知道从哪里开始 - 我一直使用Boost.Asio库,它很好地隐藏了大部分协议问题.我相信这是可能的,因为有些Windows程序似乎做了类似的事情,请参阅http://com0com.sourceforge.net/
任何指导性建议都会受到欢迎.非常感谢
c++ ×6
boost ×1
boost-asio ×1
boost-mpl ×1
boost-thread ×1
ethernet ×1
fpic ×1
installation ×1
iterator ×1
linker ×1
linux ×1
serial-port ×1
stl ×1
tcp ×1
windows ×1