小编wil*_*ell的帖子

C++字符串模板库

我想要简单的基于C++字符串的模板库来在运行时替换字符串.

例如,我会用

string template = "My name is {{name}}";
Run Code Online (Sandbox Code Playgroud)

在运行时,我希望根据实际名称更改名称.

我找到了一个例子,www.stringtemplate.org但是当我谈到antlr等时我有点害怕.

c++ string

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

消除彼此之间具有强烈概念联系的类的耦合

我有类型的Rock,PaperScissors.这些是Rock,Paper,Scissors游戏的组件或"手".鉴于两名球员的手,比赛必须决定谁获胜.如何解决存储此链表的问题

岩石,纸,剪刀图表

没有将各种手相互耦合?目标是允许在游戏中添加新手(例如Jon Skeet)而不更改任何其他游戏.

我对代理的任何想法持开放态度,但不对大型switch语句或代码重复持开放态度.例如,引入一个管理链的比较的新类型是好的,只要我不需要为我添加的每个新手更改它.再说一遍,如果你可以合理地拥有一个必须为每一个新手或一只手改变的代理,那也是受欢迎的.

这是一个设计101问题,但我很好奇人们可以为此提出什么解决方案.显然,这个问题很容易扩展到更大的系统,有更多的组件,它们之间有任意复杂的关系.这就是为什么我要提出一个非常简单而具体的例子来解决.任何使用的范例,OOP或其他方式都是受欢迎的.

language-agnostic

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

使用Boost.Spirit编译一个简单的解析器

我正在攻击的一个简单的骨架实用程序的一部分我有一个语法来触发文本中的替换.我认为这是一种很好的方式来适应Boost.Spirit,但模板错误是一种独特的喜悦.

以下是完整的代码:

#include <iostream>
#include <iterator>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>

namespace bsq = boost::spirit::qi;

namespace {
template<typename Iterator>
struct skel_grammar : public bsq::grammar<Iterator> {
    skel_grammar();

private:
    bsq::rule<Iterator> macro_b;
    bsq::rule<Iterator> macro_e;
    bsq::rule<Iterator, bsq::ascii::space_type> id;
    bsq::rule<Iterator> macro;
    bsq::rule<Iterator> text;
    bsq::rule<Iterator> start;
};

template<typename Iterator>
skel_grammar<Iterator>::skel_grammar() : skel_grammar::base_type(start)
{
    text = bsq::no_skip[+(bsq::char_ - macro_b)[bsq::_val += bsq::_1]];
    macro_b = bsq::lit("<<");
    macro_e = bsq::lit(">>");
    macro %= macro_b >> id >> macro_e;
    id %= -(bsq::ascii::alpha | bsq::char_('_'))
        >> +(bsq::ascii::alnum | bsq::char_('_'));
    start = *(text | macro); …
Run Code Online (Sandbox Code Playgroud)

c++ boost-spirit

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

C++ 0x:标准算法的范围重载?

std::sort(range(c));
Run Code Online (Sandbox Code Playgroud)

而不是

std::sort(c.begin(), c.end();
Run Code Online (Sandbox Code Playgroud)

您是否期望下一个标准为标准算法提供范围过载?

Boost的范围迭代器是类似的,iseq()在TC++ PL3e中提到的Bjarne Stroustrup 也是同样的想法.我查看了我能找到的最新草案,但没有看到提到的范围超载.

c++ c++11

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

当RAII对象无法构造时

假设我构造了一个RAII对象,并且该对象可能无法构造.我该如何处理?

try {
    std::vector<int> v(LOTS);
    // try scope ends here because that's what the catch is for
} catch( const std::bad_alloc& ) {
    // ...
}
// v? what v?
Run Code Online (Sandbox Code Playgroud)

当然,默认构造函数std::vector不会抛出,这可能有所帮助,但这不是一般情况.一个构造函数可能会抛出.如果我想处理任何资源获取失败,如果它没有抛出,我怎么能这样做仍然能够继续?

编辑:为了澄清,我的问题是,如果资源无法获取,那么我可能想再试一次,依此类推.也许我可以尝试获取替代资源.

c++ raii

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

Ruby:关于定义类的定义

在Ruby中,为什么定义一个类进行求值nil?定义方法也是如此:为什么要评估nil?如果定义一个类会被评估为类,那会不会有用?

ruby

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

你如何在单身人士和未命名的阶级之间做出选择?

我会使用像这样的单身人士:

Singleton* single = Singleton::instance();
single->do_it();
Run Code Online (Sandbox Code Playgroud)

我会使用这样一个未命名的类:

single.do_it();
Run Code Online (Sandbox Code Playgroud)

我觉得Singleton模式除了具有可读错误消息之外没有优于未命名类的优势.使用单例比使用未命名的类对象更笨拙:首先,客户端必须首先获得实例的句柄; 第二,Singleton::instance()可能需要考虑并发的实现者.

那么为什么以及如何选择一个单身人士而不是一个未命名的班级呢?

作为附录,虽然明确定义了一个未命名的类可能是

class {
    // ...
}single;
Run Code Online (Sandbox Code Playgroud)

我可以这样定义它:

#ifndef NDEBUG
class Singleton__ {   // readable error messages,
#else
class {               // unnamed, clients can't instantiate
#endif
    // ...
}single;
Run Code Online (Sandbox Code Playgroud)

后一种方法具有可读编译器错误消息的优点,但在调试模式下不是单例.

c++ singleton

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

论函数调用中的异常安全性

f()异常安全的调用吗?

inline std::auto_ptr<C> auto_new() {
   return std::auto_ptr<C>(new C());
}

void f(std::auto_ptr<C> p1,
       std::auto_ptr<C> p2);

// ...
{
    f(auto_new(), auto_new());
}
Run Code Online (Sandbox Code Playgroud)

换句话说,auto_new()如果两个函数是内联的,那么当涉及到第一个和第二个函数调用的原子性时,它会有什么不同吗?

c++ function-call exception-safety

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

Ruby中的LoadError

我有问题要求'digest/sha1'.

~$ ./configure --prefix=$HOME/usr --program-suffix=19 --enable-shared
~$ make
~$ make install
~$ irb19
irb(main):001:0> require 'digest/sha1'
LoadError: dlopen(/Users/matan/usr/lib/ruby19/1.9.1/i386-darwin9.8.0/digest/sha1.bundle, 9): Symbol not found: _rb_Digest_SHA1_Finish
  Referenced from: /Users/matan/usr/lib/ruby19/1.9.1/i386-darwin9.8.0/digest/sha1.bundle
  Expected in: flat namespace
 - /Users/matan/usr/lib/ruby19/1.9.1/i386-darwin9.8.0/digest/sha1.bundle
    from (irb):1:in `require'
    from (irb):1
    from /Users/matan/usr/bin/irb19:12:in `<main>'
irb(main):002:0> 
Run Code Online (Sandbox Code Playgroud)

我知道一些标准模块需要很好,而其他标准模块则不需要.如果我说require 'yaml'或甚至require 'digest'那时候工作正常.我使用的是OS X 10.5.8,Ruby 1.9.1-p378.系统范围的Ruby 1.8.6安装工作正常.

就在上周,我卸载了Ruby并重新安装了它.当我第一次安装Ruby时,我以类似的方式从我的本地$HOME/usr目录前缀的源代码安装它.我尝试删除每个文件make install安装,然后重新安装,但这没有帮助.

您是否知道问题是什么以及如何解决?

ruby

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

C++:错误:期望的primary-expression

void add(int register, int& acc)
{
    acc += register;
}
Run Code Online (Sandbox Code Playgroud)

main.cpp:124:错误:'register'之前的预期primary-expression

那边有错吗?

c++ function

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

宏分辨率地址

#define PLAINTEXT_TARGET "plaintext"
if( strstr(PLAINTEXT_TARGET, optarg) == PLAINTEXT_TARGET )
    /* ... */
Run Code Online (Sandbox Code Playgroud)

C语言是否保证PLAINTEXT_TARGET以上编译成单个实例?如果编译器可能产生宏字符串的两个实例,那么上面的条件是误导性的并且可以是假的.

c

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

矢量的第一个元素的地址是固定的吗?

例如,如果我做这样的事情:

vector<int> myvector;
myvector.push_back(100);
int * ptr = &(myvector[0]);
myvector.clear();
myvector.push_back(10);
Run Code Online (Sandbox Code Playgroud)

ptr仍然有效吗?或者它现在可能指向垃圾?

c++ pointers stl vector

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

如何在C++中解决这个中值编程问题

  1. 制定从五个唯一数字中识别中位数的步骤,并在流程图中将其可视化.
  2. 开发一个应用程序,在从用户获取五个唯一数字后显示中位数.
  3. 扩展功能允许输入六个唯一数字并计算中位数.

示例:
输入:5 4 2 1 10
输出:Median = 4

我发现在这个问题问题使用C++解决瓦尔特·萨维奇,但我没能解决它.有谁可以向我解释一下?

c++

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