小编Nav*_*K N的帖子

快速监视窗口未在Visual Studio for C++/CLI项目中显示变量值

我知道Visual Studio对C++/CLI的支持很糟糕.但是在做快速手表时我遇到了一个奇怪的问题.我正在观察的变量在范围内并且具有价值.但VS说,变量不在范围内.看图像

C ==/CLI中的快速监视问题http://www.freeimagehosting.net/uploads/95471b8cb4.png

如果有人可以提出解决方法,那就太好了.或者这是VS的错误?

.net c++ visual-studio-2008

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

装饰图案的替代品

我觉得装饰模式最让人困惑.请考虑"Head first design patterns book"中提供的示例.

替代文字

因此,为了获得带有双摩卡和鞭子的DarkRoast,你必须写

Beverage beverage2 = new DarkRoast();
beverage2 = new Mocha(beverage2);                                       
beverage2 = new Mocha(beverage2);                                       
beverage2 = new Whip(beverage2); 
Run Code Online (Sandbox Code Playgroud)

我觉得这是不必要的.这是我的实施,

interface Beverage
{
   int Cost();
}

class DarkRoast : Beverage
{
   /* .... */
}

class Mocha : Beverage
{
   /* .... */
}

class Whip : Beverage
{
   /* .... */
}

// here is the changed part
class Order
{
    List<Beverage> beverages = new List<Beverage> beverages();
    public void AddItem(Beverage b)
    {
        beverages.Add(b); …
Run Code Online (Sandbox Code Playgroud)

c# java design-patterns

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

从Emacs的子目录中调用项目根目录中的makefile

我在项目根目录中有一个makefile.如果我在子目录中编辑文件,如何从EMACS 调用makeMx编译make将无法正常工作,因为它在当前目录中查找makefile.但是我在项目根目录中有makefile.

有什么想法吗?

编辑

正如所建议的那样,make -f fullpath_to_makefile就可以了.但是我在makefile中包含了一些包含" tests/module.mk "的包含失败的内容.它正在子目录中查找" tests "目录.这可以通过在makefile中指定完全限定的路径来解决.但我不认为这是一个很好的解决方案.有更好的方法吗?

emacs makefile

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

从"foo <T>"转换为"const foo <const T>" - C++

我有一个函数(请不要关心通过引用返回临时.这只是一个解释问题的例子),

const foo<const int>& get_const()
{
    foo<int> f;
    return f;
}
Run Code Online (Sandbox Code Playgroud)

这显然不会编译.我正在寻找一种方法,以确保调用方不会改变Tfoo.我该如何确保?

我见过类似的行为boost::shared_ptr.shared_ptr<T>可转换为const shared_ptr<const T>.我无法弄清楚它是如何做到这一点的.

任何帮助都会很棒.

c++ templates constants const-correctness

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

根据变量的值执行函数 - C++

我正在制作音译工具.我有两个模块lexer和翻译器.Lexer从输入文本中生成标记.根据当前选择的语言,我必须调用适当的翻译例程.

我提出了几个想法来做到这一点.第一个是创建一个被调用的基类,base_translator并提供虚拟方法(translate()),每个翻译都必须覆盖它.现在创建一个工厂translator_factorycreate()使用语言名称进行调用.该工厂将返回适当的实例.

但这似乎超过了工程.所以我提出了另一种方法,我有一个如下所示的结构.

struct translator
{
    const char* name;
    void (*fp)();
};
Run Code Online (Sandbox Code Playgroud)

它只保留一个语言名称和一个可以处理它的函数指针.用法是,

static translator translators[] = {
    {"first", first},
    {"second", second}
};
const char* language = /* */; 
for(int i = 0; i < 2; i++) {
    translator *t = translators + i;
    if(strcmp(t->name, language) == 0) {
        t->fp();
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法非常简单易于维护.但我想知道,这是解决问题的最佳方法吗?你有什么建议让这更好吗?

任何帮助都会很棒.

c++ function-pointers

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

关于sizeof用法的问题

问题1

我有一个像这样的结构,

struct foo
{
    int a;
    char c;
};
Run Code Online (Sandbox Code Playgroud)

当我说sizeof(foo),我正在8上机.根据我的理解,int为4个字节,char为1个字节,填充为3个字节.那是对的吗?给定如上所述的结构,我将如何找出将添加多少字节作为填充?

问题2

我知道sizeof可以用来计算数组的大小.大多数情况下,我已经看到使用像(foos是一个数组foo)

sizeof(foos)/sizeof(*foos)
Run Code Online (Sandbox Code Playgroud)

但我发现以下内容也会给出相同的结果.

sizeof(foos) / sizeof(foo)
Run Code Online (Sandbox Code Playgroud)

这两个有什么不同吗?哪一个更受欢迎?

问题3

请考虑以下声明.

foo foos[] = {10,20,30};
Run Code Online (Sandbox Code Playgroud)

当我这样做时sizeof(foos) / sizeof(*foos),它给出了2.但是数组有3个元素.如果我将语句更改为

foo foos[] = {{10},{20},{30}};
Run Code Online (Sandbox Code Playgroud)

它给出了正确的结果3.为什么会发生这种情况?

有什么想法吗..

c c++ sizeof

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

获取void*的大小以创建一个简单的通用动态分配数组 - C.

我在C中创建了一个简单的动态数组.

typedef struct varray_t
{
    void **memory;
    size_t allocated;
    size_t used;
    int index;              
} varray;

void
varray_init(varray **array)
{
    *array = (varray*) malloc (sizeof(varray));    
    (*array)->memory = NULL;
    (*array)->allocated = 0;
    (*array)->used = 0;
    (*array)->index = -1;
}

void
varray_push(varray *array, void *data, size_t size)
{
    if ((array->allocated - array->used) < size) {
        array->memory = realloc(array->memory, array->allocated + size);
        array->allocated = array->allocated + size;
    }

    array->used = array->used + size;   
    array->memory[++array->index] = data;
}

int
varray_length(varray *array)
{
    return array->index + …
Run Code Online (Sandbox Code Playgroud)

c arrays memory-management dynamic-arrays

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

使C库线程安全

我在C中编写一个共享库.我知道C函数不是线程安全的.

我的库例程看起来像,

struct lib_handle {
....
};

int lib_init(lib_handle **handle);
int lib_process(lib_handle *handle);
....
....
Run Code Online (Sandbox Code Playgroud)

每个方法都有一个指向lib_handle对象的指针.所有状态都存储在此结构中.没有使用全局变量.

我假设如果每个线程创建它自己的lib_handle实例,多个线程可以使用库函数.由于每个线程都有自己的句柄,因此everythibg应该可以工作.

我还没有验证这个假设.我想知道你们对这个设计有什么看法,你能说出我的库是线程安全的,因为每个线程都有它自己的句柄吗?

任何帮助都会很棒!

c concurrency multithreading shared-libraries

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

如何在Windows上编译memcached?

我想memcached在Windows上运行.我已经下载了memcached最新的稳定版并在Windows 7下使用Mingw进行了编译.配置失败并出现错误,

检查libevent目录... configure:错误:需要libevent.你可以从http://www.monkey.org/~provos/libevent/获得它

  If it's already installed, specify its path using --with-libevent=/dir/
Run Code Online (Sandbox Code Playgroud)

然后我下载libevent并编译了它.这产生了3个DLL,libeventcore,libevent-extra和libevent-2.0.5.

memcached使用该选项再次运行configure --with-libevent.但由于某种原因,它再次失败并出现同样的错误.我不知道它失败的原因.任何人都可以帮我解决这个问题吗?或者有更好的方法memcached在Windows上运行吗?我已经看到很多用于Windows的预构建二进制文件.但他们都使用旧版本memcached.而AFAIK,Windows memcached在新版本中得到官方支持.

我在MinGW上使用Windows7 64位版本.

c windows memcached mingw libevent

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

为什么这个程序在使用goroutines时表现不佳?

我正在学习Go编程语言.请考虑以下计划,

package main

import (
    "fmt"
    "bytes"
    "os"
    "os/exec"
    "path/filepath"
    "sync"
)

func grep(file string) {
    defer wg.Done()

    cmd := exec.Command("grep", "-H", "--color=always", "add", file)
    var out bytes.Buffer
    cmd.Stdout = &out
    cmd.Run()
    fmt.Printf("%s\n", out.String())
}

func walkFn(path string, info os.FileInfo, err error) error {
    if !info.IsDir() {
        wg.Add(1)
        go grep (path)
    }
    return nil
}

var wg sync.WaitGroup

func main() {
    filepath.Walk("/tmp/", walkFn)
    wg.Wait()
}
Run Code Online (Sandbox Code Playgroud)

该程序遍历目录中的所有文件/tmp,并grep在goroutine中的每个文件上执行.所以这将产生ngoroutines,其中n是目录中存在的文件数/tmp.主要等到所有goroutines完成工作.

有趣的是,这个程序需要相同的时间来执行有和没有goroutines.尝试运行go grep (path, …

concurrency performance grep go

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