我最近想了解一C++的程序,是由的人,我承担了一个背景中的功能编程:例如,他曾宣布一个 封闭 类其他广泛使用,这不会有点像什么被称为封闭在功能方案编制。另一类被称为 警卫队, 但是我还没有想通了但什么是良好的。这似乎有某种形式的清理功能。

唯一的语言中,我看到一个概念被称为 警卫队 是朗,但是,这并不远程类似于代码我发现。在其他什么语言不这样一个概念存在,提交人的C++码可能已经提到的?

有帮助吗?

解决方案

要我来说,它听起来就像他用RAII。结果 在类的构造函数/析构函数是用来symetrically处理某种形式的资源分配/释放一个异常安全的前提下(什么Java程序员将最终{}的析构函数存在保证被称为调用)。

这是一个很普通的C ++成语并在现代C广泛UED ++

做的代码看起来是这样的:

void Plop()
{
     Guard   guard(lock);
     // Do lots of stuff
}

下面的防护件被锁定在构造锁定和解锁中的析构函数的锁定。

其他提示

的术语“防护”在用于多个功能的语言的它的方式Erlang中被使用,但使用似乎并不适合你的描述。没有看到C ++代码很难真正知道什么是意在通过它。

通过你的描述一个猜测是,它实现了类似Haskell的的 bracket ,该基本上确保了一些资源被如果包装函数退出释放,即使通过异常发生的。在Python一个将用于该finally,在C ++通常必须清理代码在栈上的对象的析构函数。

在一般术语中,护卫仅仅是其需要评估为真用于沿着一些路径执行继续的构建体。这或类似的东西存在于所有有用的图灵完备的编程语言,但也许是如此基本,往往是不单独命名为一个实体。下面是在Haskell一个简单示例:

f x
 | x < 0 = -x
 | otherwise = x

这相当于绝对值函数:否定的数,如果它的负产生其正对应;否则,返回在通过了相同的值这里有两个警卫:。x < 0,当x小于零,这是真实的,并且otherwise,这始终是真的

Haskell的控制。单模块已 guard:

guard :: MonadPlus m => Bool -> m ()
guard breturn () 如果 bTrue, , mzero 如果 bFalse.

例如,计算毕达哥拉斯的三倍,其中每一条腿是不超过25,你可以使用

triples = do
  a <- [1..25]
  b <- [a..25]
  c <- [b..25]
  guard (p a b c)
  return (a,b,c)
  where
    p a b c = a*a + b*b == c*c

解释什么,看看我的博客 可编程的分号的说明.

卫兵在计算机科学中通常指的是布尔表达式,表示一个循环结构应该继续。例如(赦免双关语)

for (int i = 0; i < N; ++i)
  /* stuff */

下面,i < N是保护。

这是很难没有更多的信息更全面地回答你的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top