问题列表 - 第8462页

当我创建助手课程时,我是不是在设计?

我是一名C++程序员,最近加入了一家使用大量C的新公司.当他们审查我的代码时,他们认为我过度设计了一些我完全不同意的事情.该公司正在做嵌入式系统中的所有事情,因此我的代码需要内存效率,但我正在做的事情不是CPU密集型的.我想知道你们怎么想我的设计.这是清单.

  1. 我有一些需要传递的数组,最终需要传递给一些C代码.我可以在这个地方传递一个指针和一个大小.但是我选择创建一个表示它的类 - 一个具有固定大小(我们知道最大大小)缓冲区的类,以及一个长度应始终<=缓冲区的大小,否则断言.通过这种方式,我可以只使用一个变量而不是两个变量来传递数组,如果将来最大的大小发生变化,我应该可以轻松地更改它.我没有为数组使用动态分配,因为它是嵌入式系统和内存分配可能会失败,我们不使用异常.该类可能少于30行代码,我在很多地方使用它.他们说我过度设计了它.

  2. 它们在C中有自己的容器实现.我需要使用其中一个,但我想隐藏所有详细的代码,远离我的主逻辑,所以我为它创建了一个包装类.包装类类似于stl,所以我有迭代器并且它在内部管理内存分配,但与stl不同,它在无法分配更多内存时返回错误代码.他们对这个问题的论点是我是唯一一个使用它的人,因此他们不希望它存在于存储库中.说实话,我发现这很愚蠢.

编辑:下面的类或多或少是我用于第1点的.我想要做的就是有一些东西可以传递而不会一直带着长度.

class A
{
  static const MAX_SIZE = 20;
  int m_Array[MAX_SIZE];
  size_t m_Len;

public:
  A(const int* array, size_t len)
  {
    assert(len <= MAX_SIZE);
    memcpy(m_Array, array, len);
    m_Len = len;
  }

  size_t GetLen() const { return m_Len; }
  const int* GetArray() const { return m_Array; }
};
Run Code Online (Sandbox Code Playgroud)

c c++

8
推荐指数
2
解决办法
628
查看次数

C++将shared_ptr提升为hash_map键

我正在创建一个神经网络,并希望使用hash_map来保持每个神经元的输出神经元的权重参考:

class Neuron; //forward declaration was there (sorry I forgot to show it earlier)
typedef double WEIGHT;
typedef stdext::hash_map<boost::shared_ptr<Neuron>,WEIGHT> NeuronWeightMap;
class Neuron
{
private:
    NeuronWeightMap m_outputs;
    //...
public:

    Neuron();
    ~Neuron();
    //...
    WEIGHT GetWeight(const boost::shared_ptr<Neuron>& neuron) const
    {
        NeuronWeightMap::const_iterator itr = m_outputs.find(neuron);
        if( itr != m_outputs.end() )
        {
            return itr->second;
        }
        return 0.0f;
    }
};
Run Code Online (Sandbox Code Playgroud)

我意识到我不能使用boost :: shared_ptr作为stdext :: hash_map的键,那么另一个建议是什么呢?是否有任何解决方法或是使用不同密钥或切换到std :: map的唯一选择?谢谢!

这是错误:

1>c:\program files (x86)\microsoft visual studio 8\vc\include\xhash(61) : error C2440: 'type cast' : cannot convert from 'const boost::shared_ptr<T>' to …
Run Code Online (Sandbox Code Playgroud)

c++ boost hashmap shared-ptr neural-network

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

在Emacs中,如何更改迷你缓冲区完成列表窗口?

我想为迷你缓冲区完成列表设置一个特定的窗口.目前,我在此配置中有3个窗口:

 ______
|    | |
|____| |
|____|_|
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想使用左下角窗口显示迷你缓冲区完成列表.

目前,它似乎是一个随机的窗口,并且大多数时候它喜欢使用最右边的窗口,这个窗口太薄而不能显示完成列表而不必我水平滚动,这很烦人.

另外,我使用了一个名为口齿不清脚本revive.el恢复从文件(〜/ .revive.el)我的窗口配置时,我打开Emacs的.

emacs elisp

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

在Python中的另一个函数中获取调用函数名称?

如果你有两个功能,如:

def A
def B
Run Code Online (Sandbox Code Playgroud)

和A打电话给B,你能得到谁在B里面叫B,比如:

def A () :
    B ()

def B () :
    this.caller.name
Run Code Online (Sandbox Code Playgroud)

python debugging

110
推荐指数
5
解决办法
7万
查看次数

如何在C中正确等待我自己的shell中的前台/后台进程?

之前的问题,我最贴出我自己的shell代码.我的下一步是实现前台和后台进程执行并正确等待它们终止,这样它们就不会像"僵尸"那样停留.

在添加在后台运行它们的可能性之前,所有进程都在前台运行.为此,我在使用execvp()执行任何进程后简单地调用wait(NULL).现在,我检查'&'字符作为最后一个参数,如果它在那里,通过不调用wait(NULL)在后台运行该进程,并且进程可以在后台运行愉快我将返回到我的shell.

这一切都正常(我认为),现在的问题是,我还需要以某种方式调用wait()(或waitpid()?),以便后台进程不会保持"僵尸".这是我的问题,我不知道该怎么做......

我相信我必须处理SIGCHLD并在那里做一些事情,但是我还没有完全理解何时发送SIGCHLD信号,因为我还试图将wait(NULL)添加到childSignalHandler()但是它不起作用因为我一旦在后台执行了一个进程,调用了childSignalHandler()函数,因此等待(NULL),这意味着在"后台"进程完成之前我无法对我的shell做任何事情.由于信号处理程序中的等待,它不再在后台运行.

我在这一切中缺少什么?

最后一件事,这个练习的一部分我还需要打印进程状态的变化,比如进程终止.因此,对此的任何见解也非常感激.

这是我目前的完整代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <wait.h>
#include <signal.h>
#include <sys/types.h>

#include "data.h" // Boolean typedef and true/false macros


void childSignalHandler(int signum) {
    //
}

int main(int argc, char **argv) {
    char bBuffer[BUFSIZ], *pArgs[10], *aPtr = NULL, *sPtr;
    bool background;
    ssize_t rBytes;
    int aCount;
    pid_t pid;

    //signal(SIGINT, SIG_IGN);

    signal(SIGCHLD, childSignalHandler);

    while(1) {
        write(1, "\e[1;31mmyBash \e[1;32m# \e[0m", 27);
        rBytes = read(0, bBuffer, BUFSIZ-1);

        if(rBytes == -1) {
            perror("read");
            exit(1); …
Run Code Online (Sandbox Code Playgroud)

c signals process background-foreground

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

如何理解class_eval()和instance_eval()之间的区别?

Foo = Class.new
Foo.class_eval do
  def class_bar
    "class_bar"
  end
end
Foo.instance_eval do
  def instance_bar
    "instance_bar"
  end
end
Foo.class_bar       #=> undefined method ‘class_bar’ for Foo:Class
Foo.new.class_bar   #=> "class_bar"
Foo.instance_bar       #=> "instance_bar"
Foo.new.instance_bar   #=> undefined method ‘instance_bar’ for #<Foo:0x7dce8>
Run Code Online (Sandbox Code Playgroud)

只是基于方法的名称,我希望class_eval允许你向Foo和instance_eval添加一个类方法,以允许你向Foo添加一个实例方法.但他们似乎反其道而行之.

在上面的例子中,如果你在Foo类上调用class_bar,你会得到一个未定义的方法错误,如果你在Foo.new返回的实例上调用instance_bar,你也会得到一个未定义的方法错误.这两个错误似乎都与对class_eval和instance_eval应该做什么的直观理解相矛盾.

这些方法之间有什么区别?

class_eval的文档:

mod.class_eval(string [,filename [,lineno]])=> obj

在mod的上下文中计算字符串或块.这可以用于向类添加方法.

instance_eval的文档:

obj.instance_eval {| | block} => obj

在接收器(obj)的上下文中计算包含Ruby源代码或给定块的字符串.为了设置上下文,在代码执行时将变量self设置为obj,使代码可以访问obj的实例变量.

ruby class-method instance-method

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

比较序列的优雅方式

python是否提供了一种检查不同类型序列"相等"的优雅方法?以下工作,但它们对于python代码看起来相当丑陋和冗长:

def comp1(a, b):
    if len(a) != len(b):
        return False
    for i, v in enumerate(a):
        if v != b[i]:
            return False
    return True
Run Code Online (Sandbox Code Playgroud)

由于创建了第三个序列,以下内容有点短,但效率也较低:

def comp2(a, b):
    for l, r in map(None, a, b):
        if l != r:
            return False
    return True
Run Code Online (Sandbox Code Playgroud)

将其中一个例子列入列表理解并不是我正在寻找的.

编辑:理想情况下,我正在寻找一种在比较期间不会创建另一个序列的解决方案.

python

11
推荐指数
3
解决办法
7366
查看次数

SQLite.NET和SQL Server Compact的优点和缺点

我多次使用过SQLite.NET.它总是工作正常,但我有一个朋友真的纠缠我,我应该使用SQL Server Compact,所以我完全呆在Microsoft环境中.

现在,我从未与Compact合作过,他告诉我这对他来说很好,但是看到.MDF扩展给了我毛骨悚然.不开玩笑.我想要的最后一件事是我的应用程序依赖于Access数据库.

由于我从来没有真正使用它,我问这里是否有人知道它为它做凭证,如果有人能告诉我它们之间的主要区别,主要是速度,文件大小,可靠性和功能.我知道要问很多,但如果有人能帮助我,我会很感激.

database sqlite system.data.sqlite sql-server-ce

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

第一次播放声音时AVAudioPlayer启动缓慢

我试图通过iPhone上的AVAudioPlayer播放(非常短 - 少于2秒)的音频文件来消除启动延迟.

一,代码:

NSString *audioFile = [NSString stringWithFormat:@"%@/%@.caf", [[NSBundle mainBundle] resourcePath], @"audiofile"];
NSData *audioData = [NSData dataWithContentsOfMappedFile:audioFile];

NSError *err;
AVAudioPlayer *audioPlayer = [(AVAudioPlayer*)[AVAudioPlayer alloc] initWithData:audioData error:&err];

audioPlayer.delegate = self;
[audioPlayer play];
Run Code Online (Sandbox Code Playgroud)

一旦完成,我还实现了audioPlayerDidFinishPlaying方法来释放AVAudioPlayer.

我第一次播放音频时滞后是显而易见的 - 至少2秒.然而,之后立即播放声音.我怀疑那个罪魁祸首是[NSData dataWithContentsOfMappedFile]最初从闪存中读取了很长时间,但后来读取速度很快.不过,我不确定如何测试.

是这样的吗?如果是这样,我是否应该预先缓存NSData对象并积极地在低内存条件下清除它们?

iphone audio caching nsdata avaudioplayer

36
推荐指数
4
解决办法
2万
查看次数

PHP多个MySQL连接虽然是类/对象?

这是我正在努力工作的代码:

<?php

class database {
    var $connection;
    function database($host,$username,$password,$database){
        $this->connection = mysql_connect($host, $username, $password);
        mysql_select_db($database,$this->connection);
    }
    function query($query){
        $query = mysql_query($query,$this->connection);
        return $query;
    }
}

$db = new database("localhost","root","password","database1");
$db2 = new database("SERVER2","root","password","database2");

$sql = $db->query("SELECT * FROM users WHERE name = 'Yifan' LIMIT 1");
$row = mysql_fetch_assoc($sql);

var_dump($row);

$sql = $db2->query("SELECT * FROM users WHERE name = 'Yifan' LIMIT 1");
$row = mysql_fetch_assoc($sql);

var_dump($row);

?>
Run Code Online (Sandbox Code Playgroud)

所以,如果你不明白,我希望有两个或更多的连接到mysql使用对象,但问题是,我得到"bool(false)"作为第一个结果,并对第二个结果的正确响应.对于我做错了什么,或者甚至是可能的想法?谢谢.

php mysql class object

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