小编jav*_*red的帖子

在c ++上迭代ini文件,可能使用boost :: property_tree :: ptree?

我的任务很简单 - 我只需要解析这样的文件:

Apple = 1
Orange = 2
XYZ = 3950
Run Code Online (Sandbox Code Playgroud)

但我不知道可用密钥的集合.我使用C#解析这个文件比较容易,让我演示源代码:

    public static Dictionary<string, string> ReadParametersFromFile(string path)
    {
        string[] linesDirty = File.ReadAllLines(path);
        string[] lines = linesDirty.Where(
            str => !String.IsNullOrWhiteSpace(str) && !str.StartsWith("//")).ToArray();

        var dict = lines.Select(s => s.Split(new char[] { '=' }))
                        .ToDictionary(s => s[0].Trim(), s => s[1].Trim());
        return dict;
    }
Run Code Online (Sandbox Code Playgroud)

现在我只需要使用c ++做同样的事情.我想要使​​用,boost::property_tree::ptree但似乎我不能迭代ini文件.它很容易阅读ini文件:

boost::property_tree::ptree pt;
boost::property_tree::ini_parser::read_ini(path, pt);
Run Code Online (Sandbox Code Playgroud)

但是不可能迭代它,参考这个问题Boost程序选项 - 获取部分中的所有条目

问题是 - 在C++上编写C#代码模拟的最简单方法是什么?

c++ boost

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

如何在boost :: unordered_map中实现TryGetValue?

C#我喜欢的TryGetValue方法,Dictionary因为它允许我在一个调用中确定字典是否包含键和接收值,如果是这样:

Instrument instrument;
if (isinId2Instrument.TryGetValue(isin_id, out instrument))
{
    // key exist, instrument contains value
} else {
    // key doesn't exist
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做同样的事情boost::unordered_map

c++ boost boost-unordered

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

在localhost上使用zeromq是否有意义?或者最好使用共享内存?

我需要在两个进程之间传输金融数据(目前c ++和c#,未来的c ++和c ++在Linux上).这是现场报价 - 例如1 100,1 100.1,2 101.2等等.).数据具有明确定义的格式.延迟必须很低.我在zeromq和自己使用共享内存之间做出选择.我有几个关于zeromq的问题:

  • 是否会减少错误并且更容易使用zeromq而不是自己使用共享内存?
  • 如果localhost上的zeromq延迟与共享内存的延迟相当?

我不需要在不同的主机上运行我的部件或类似的东西.所以我在localhost上有一个生产者 - 一个消费者模式.我只是不确定我是否应该使用zeromq这样简单的场景,或者我应该只使用共享内存,就是这样吗?

zeromq

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

如何划分boost :: optional <double>?

我有这样的代码:

boost::optional<double> result = _ind1.Value() / _ind2.Value();
Run Code Online (Sandbox Code Playgroud)

每个arg boost::optional<double>也是:

boost::optional<double> Value() {
    return value;
}
Run Code Online (Sandbox Code Playgroud)

错误是:

Error 1 error C2676: binary '/' : 'boost::optional<T>' does not define this operator or a conversion to a type acceptable to the predefined operator 2 IntelliSense: no operator "/" matches these operands operand types are: boost::optional<double> / boost::optional<double>

我明白分裂似乎没有定义.我希望结果是boost::none两个参数中的任何一个none- 否则我希望它是正常的双重除法.我应该自己写吗?

c++ boost boost-optional

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

为什么缓冲区应该在64字节边界上对齐以获得最佳性能?

这个示例程序中,我发现了这个注释:

/* Hardware delivers at most ef_vi_receive_buffer_len() bytes to each
 * buffer (default 1792), and for best performance buffers should be
 * aligned on a 64-byte boundary.  Also, RX DMA will not cross a 4K
 * boundary.  The I/O address space may be discontiguous at 4K boundaries.
 * So easiest thing to do is to make buffers always be 2K in size.
 */
#define PKT_BUF_SIZE         2048
Run Code Online (Sandbox Code Playgroud)

我很感兴趣为什么for best performance buffers should be aligned on a 64-byte boundary …

c++ memory-management latency

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

std :: atomic <int> - 以原子方式加载并重置为0?

std::atomic<int>怎样才能自动加载值并重置为0?所以,如果我从两个线程执行此操作,只有一个接收值,另一个应该接收0.

c++ c++11

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

对于字符串,==运算符默认如何工作?

可能重复:
在字符串的情况下,请告诉我为什么两个引用对于字符串对象是相同的(代码如下)

当我在C#s1 == s2中写入时,两者都声明为字符串,编译器会比较引用或内容吗?即如果==是为string班级重写?

我只是想知道为什么这段代码打印"true":

string s1 = "hello"
string s2 = s1 + " ";
s2 = s2.Trim(); // i expect new object here
Console.WriteLine(s2 == s1);
Run Code Online (Sandbox Code Playgroud)

此外,我还有一些第三方来源,==通常用于字符串比较.这让我很疯狂,因为我几乎从不==用来比较Java中的字符串,现在我无法理解这段代码是如何工作的.

==用于比较C#中的字符串是否正常?

upd:多亏了所有,几乎所有答案都是正确的.总结:

  • 是的,使用"=="比较C#中的字符串是正常的
  • 字符串将按内容进行比较(不参考)
  • ==字符串运算符不是虚拟的.
  • C#中的字符串是不可变的(这与Java类似)

此行为与Java不同,其中String类的"=="比较引用.

另请参阅为什么字符串不能比较引用?

在我个人看来语言不应该允许覆盖或重载==运算符,因为它使它像c ++一样困难:)

.net c# string equals string-comparison

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

Visual Studio:缺少Ctrl + O + O,Ctrl + T Eclipse模拟

我非常喜欢Eclipse Ctrl+ O+ Ohotkey,它不仅包括当前类的成员列表,还包括所有超类的所有成员."Quick type hiererchy"功能也很有用.Resharper有Alt+ EndAlt+ Home键,但它不会在树中组织结果非常方便.

是否有可能在VS中获得提及的功能?

resharper visual-studio

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

具有自动多线支持的消息对话框?

我正在使用JOptionPane.showMessageDialog(和showConfirmDialog其他方法)这个方法的问题 - 它不格式化文本.如果我传递了很长的消息 - 它将在一行中显示(可能比屏幕分辨率更宽).当然我可以\n在消息中使用,但这对我来说是额外的工作.

我想要一个对话框,它会自动为我格式化文本.

swing

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

如何将一些"统计"从c#程序传递到另一个程序?

我有"做很多工作"的命令行程序,并产生"很多统计数据".这是股票交易软件对延迟,错误等等至关重要,所以我不想为它添加GUI.(有时需要GUI,但应始终启动控制台应用程序)

我需要GUI来友好地显示收集的统计信息(在只读模式下).如何转移统计数据?每秒刷新它就足够了.我需要将一堆数据从一个控制台c#程序转移到另一个GUI(可能不是c#)程序,将来可能是通过网络,但现在在本地.

统计数据就像"传感器数据",每秒测量一次.有很多(数百个)传感器.(实际上,它有很多不同的值,比如"利润","每秒订单数"等)

我应该使用普通文件,数据库还是其他方式以及如何使用?

c#

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