我知道Visual Studio对C++/CLI的支持很糟糕.但是在做快速手表时我遇到了一个奇怪的问题.我正在观察的变量在范围内并且具有价值.但VS说,变量不在范围内.看图像
C ==/CLI中的快速监视问题http://www.freeimagehosting.net/uploads/95471b8cb4.png
如果有人可以提出解决方法,那就太好了.或者这是VS的错误?
我觉得装饰模式最让人困惑.请考虑"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) 我在项目根目录中有一个makefile.如果我在子目录中编辑文件,如何从EMACS 调用make?Mx编译make将无法正常工作,因为它在当前目录中查找makefile.但是我在项目根目录中有makefile.
有什么想法吗?
编辑
正如所建议的那样,make -f fullpath_to_makefile就可以了.但是我在makefile中包含了一些包含" tests/module.mk "的包含失败的内容.它正在子目录中查找" tests "目录.这可以通过在makefile中指定完全限定的路径来解决.但我不认为这是一个很好的解决方案.有更好的方法吗?
我有一个函数(请不要关心通过引用返回临时.这只是一个解释问题的例子),
const foo<const int>& get_const()
{
foo<int> f;
return f;
}
Run Code Online (Sandbox Code Playgroud)
这显然不会编译.我正在寻找一种方法,以确保调用方不会改变T的foo.我该如何确保?
我见过类似的行为boost::shared_ptr.shared_ptr<T>可转换为const shared_ptr<const T>.我无法弄清楚它是如何做到这一点的.
任何帮助都会很棒.
我正在制作音译工具.我有两个模块lexer和翻译器.Lexer从输入文本中生成标记.根据当前选择的语言,我必须调用适当的翻译例程.
我提出了几个想法来做到这一点.第一个是创建一个被调用的基类,base_translator并提供虚拟方法(translate()),每个翻译都必须覆盖它.现在创建一个工厂translator_factory并create()使用语言名称进行调用.该工厂将返回适当的实例.
但这似乎超过了工程.所以我提出了另一种方法,我有一个如下所示的结构.
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)
这种方法非常简单易于维护.但我想知道,这是解决问题的最佳方法吗?你有什么建议让这更好吗?
任何帮助都会很棒.
问题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中创建了一个简单的动态数组.
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中编写一个共享库.我知道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应该可以工作.
我还没有验证这个假设.我想知道你们对这个设计有什么看法,你能说出我的库是线程安全的,因为每个线程都有它自己的句柄吗?
任何帮助都会很棒!
我想memcached在Windows上运行.我已经下载了memcached最新的稳定版并在Windows 7下使用Mingw进行了编译.配置失败并出现错误,
检查libevent目录... configure:错误:需要libevent.你可以从http://www.monkey.org/~provos/libevent/获得它
Run Code Online (Sandbox Code Playgroud)If it's already installed, specify its path using --with-libevent=/dir/
然后我下载libevent并编译了它.这产生了3个DLL,libeventcore,libevent-extra和libevent-2.0.5.
我memcached使用该选项再次运行configure --with-libevent.但由于某种原因,它再次失败并出现同样的错误.我不知道它失败的原因.任何人都可以帮我解决这个问题吗?或者有更好的方法memcached在Windows上运行吗?我已经看到很多用于Windows的预构建二进制文件.但他们都使用旧版本memcached.而AFAIK,Windows memcached在新版本中得到官方支持.
我在MinGW上使用Windows7 64位版本.
我正在学习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, …