小编ceo*_*ceo的帖子

将正则表达式替换作为Perl中的变量传递?

我需要将正则表达式替换作为变量传递:

sub proc {
    my $pattern = shift;
    my $txt = "foo baz";

    $txt =~ $pattern;
}

my $pattern = 's/foo/bar/';
proc($pattern);
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用.我试着评估替换:

eval("$txt =~ $pattern;");
Run Code Online (Sandbox Code Playgroud)

但那也不起作用.我在这里错过了多么可怕的事情?

regex perl

23
推荐指数
5
解决办法
3万
查看次数

构造函数中的网络连接设置:好还是坏?

我正在开发一个处理与远程进程交互的类,该进程可能有也可能不可用; 实际上在大多数情况下它不会.如果不是这样,那个阶级的对象在生活中没有任何目的,需要消失.

它不那么难看:

  1. 处理构造函数中的连接设置,如果进程不存在则抛出异常.
  2. 在单独的connect()方法中处理连接设置,如果进程不存在则返回错误代码.

在选项1)中,调用代码当然必须包装该类的实例化以及在try()块中处理它的所有其他内容.在选项2中,它可以简单地检查connect()的返回值,如果失败则返回(销毁对象),但它不太符合RAII,

相关地,如果我使用选项1),最好抛出一个std :: exception类,从中派生我自己的异常类,滚动我自己的未完成的异常类,或者只是抛出一个字符串?我想包括一些失败的迹象,这似乎排除了第一个失败.

编辑澄清:远程进程在同一台机器上,因此::connect()呼叫阻止的可能性很小.

c++ network-programming

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

帮助我使这段代码异常安全

所以我有这个库代码,请看......

class Thing
{
public:

    class Obj 
    {
     public:
        static const int len = 16;

        explicit Obj(char *str)
        {
            strncpy(str_, str, len);
        }

        virtual void operator()() = 0;

    private:
        char str_[len];
    };

    explicit Thing(vector<Obj*> &objs) : objs_(objs) {}

    ~Thing() {
        for(vector<Obj*>::iterator i = objs_.begin(); i != objs_.end(); ++i) {
            delete *i;
        }
    }

private:
    vector<Obj*> objs_;
}
Run Code Online (Sandbox Code Playgroud)

在我的客户端代码中......

   class FooObj : public Thing::Obj
    {
        virtual void operator()() {
            //do stuff
        }
    }

    class BarObj : public Thing::Obj
    {
        virtual void …
Run Code Online (Sandbox Code Playgroud)

c++ exception smart-pointers container-managed

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