小编Ant*_*eru的帖子

断言在Visual Studio 2008测试框架中数组是相同的

有没有一种简单的方法来检查单元测试中两个数组是否相等(即,具有相同数量的元素,并且每个元素是相同的?).

在Java中,我会使用assertArrayEquals (foo, bar);,但似乎没有C#的等价物.我试过Assert.AreEqual(new string[]{"a", "b"}, MyFunc("ab"));,但即使函数返回一个带有"a","b"的数组,检查仍然失败

这是使用Visual Studio 2008 Team Suite,内置单元测试框架.

c# unit-testing visual-studio-2008

79
推荐指数
2
解决办法
3万
查看次数

如何将'System.Windows.Input.Key'转换为'System.Windows.Forms.Keys'?

我正在使用WPF开发应用程序,但有些组件是使用WinForms编写的.我不想这些组件从WPF部分拉出关键手势并将它们转换为Keys enum(在WinForms中使用).

是否有内置转换器?(可能不是)你知道"比大开关案例更容易"的方法吗?

.net wpf

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

操作员新的重载和对齐

我正在超载operator new,但我最近遇到了对齐的问题.基本上,我有一个类IBase,提供operator newdelete所有必要的变种.所有类都派生自IBase并因此也使用自定义分配器.

我现在面临的问题是我有一个孩子Foo必须是16字节对齐,而所有其他孩子在对齐到8字节时都很好.然而,我的内存分配器只在默认情况下与8字节边界对齐,所以现在代码IBase::operator new返回一个不可用的内存块.这应该如何正确解决?

我可以简单地强制所有分配为16个字节,这将正常工作,直到弹出一个32字节对齐的类型.弄清楚里面的对齐operator new似乎并不是微不足道的(我可以在那里进行虚函数调用以获得实际的对齐吗?)推荐的处理方法是什么?

我知道malloc应该返回一块适合所有内容的内存,不幸的是,这个"所有内容"不包含SSE类型,我真的很想让这个工作无需用户记住哪种类型有哪个对齐.

c++ operator-overloading new-operator

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

Boost.Spirit入门指南?

我最近一直在寻找Boost.Spirit(Boost 1.39中包含的版本),但是我对单独的文档很困惑.我正在寻找的是一个用Boost.Spirit实现的玩具语言的例子 - 一些微小的Javascript或Lua左右的东西,你基本上创建一个AST和进程.如果它只支持函数/变量定义和基本运算符,我会很高兴,我只想看看如何使用Boost.Spirit创建一个普通的AST,以及如何实现标识符,声明等基本规则.

到目前为止,我已经尝试过计算器示例,但我不清楚如何使用Spirit实现更大的语法.另一方面捆绑的mini_c示例看起来已经非常复杂了,并且记录得不是很好.是否有一些易于理解的Boost.Spirit指南,或者可能是一本书?

c++ boost-spirit

31
推荐指数
3
解决办法
2万
查看次数

如何在C++中跟踪内存分配(尤其是新建/删除)

如何跟踪C++中的内存分配,尤其是new/ delete.对于一个对象,我可以轻松覆盖operator new,但我不确定如何全局覆盖所有分配,以便它们通过我的自定义new/ delete.这应该不是一个大问题,但我不确定应该怎么做(#define new MY_NEW?).

一旦这个工作,我会认为它足以在分配的指针/位置的某处有一个映射,所以我可以跟踪当前"活动"的所有分配,并且 - 在应用程序结束时 - 检查分配没有被释放的.

好吧,这似乎再次像肯定已经多次完成了几次,所以任何好的库(最好是便携式的)?

c++ debugging memory-management

30
推荐指数
4
解决办法
3万
查看次数

C#编译器抱怨抽象类没有实现接口?

我有一个很好的接口,我想在基类中实现它的一个成员,因此客户端可以从基类派生,并且可以编写更少的样板.但是,即使声明为abstract,编译器也会抱怨该类没有实现接口?!?应该怎么做?

有问题的代码:

public interface ITaskDefinition
{
    ITask CreateTask(TaskId id);
    string Name { get; }
    bool HasName { get; }
}

public abstract class TaskDefinitionBase : ITaskDefinition
{
    private string name_ = null;

    public void SetName(string name)
    {
        name_ = name;
    }

    public string Name
    {
        get
        {
            return name_;
        }
    }

    public bool HasName
    {
        get
        {
            return name_ != null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

ITaskDefinition.cs(15,27): error CS0535: 'NetWork.Task.TaskDefinitionBase' does not implement interface member 'NetWork.Task.ITaskDefinition.CreateTask(NetWork.Task.TaskId)'
Run Code Online (Sandbox Code Playgroud)

c# inheritance

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

如何在F#中编写一个带有可变数量参数的函数

我在C#中有一个函数,我想将它(在其他一些东西中)移植到F#,只是为了做到这一点.不幸的是,我只是遇到了一个似乎没有办法在F#中表达这种情况的案例:拿这个C#函数

public static T Min<T>(params T[] p) where T : IComparable
{
    T m1 = p[0];

    foreach (T v in p)
    {
        m1 = (m1.CompareTo(v) < 0) ? m1 : v;
    }

    return m1;
}
Run Code Online (Sandbox Code Playgroud)

我认为这很容易,但我不明白如何在F#中指定变量参数列表.我试过这个:

let rec Min l =
    match l with
    | [] -> 0 // should throw exception here
    | [v] -> v
    | (h::t) -> min h (Min t)
Run Code Online (Sandbox Code Playgroud)

但是从C#调用它需要一个Microsoft.FSharp.Collections.List.有可能让它期待一个params T[],如果是这样,怎么样?

c# f#

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

GCC错误:无法将'const shared_ptr <...>'转换为'bool'作为回报

我正在转向GCC 4.6.1,它开始抱怨代码与GCC 4.4和MSVC10一起工作正常.它似乎不想在从这样的函数返回之间shared_ptr和之间进行转换bool:

class Class { shared_ptr<Somewhere> pointer_; };

bool Class::Function () const
{
    return pointer_;
}
Run Code Online (Sandbox Code Playgroud)

运用

return static_cast<bool> (pointer_);
Run Code Online (Sandbox Code Playgroud)

一切正常.到底他妈发生了什么?这是--std=cpp0x.

c++ gcc c++11

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

如果指针已标记为const,是否限制C中的帮助?

只是想知道:当我向指针添加restrict时,我告诉编译器指针不是另一个指针的别名.我们假设我有一个类似的函数:

// Constructed example
void foo (float* result, const float* a, const float* b, const size_t size)
{
     for (size_t i = 0; i < size; ++i)
     {
         result [i] = a [0] * b [i];
     }
}
Run Code Online (Sandbox Code Playgroud)

如果编译器必须假设result可能重叠a,则必须每次重新获取.但是,正如a标记的那样const,编译器也可以假设a是固定的,因此一次取回它就可以了.

问题是,在这种情况下,使用restrict的推荐方法是什么?我当然不希望编译器a每次都重新获取,但我找不到关于如何restrict在这里工作的好信息.

c c++ optimization restrict-qualifier

22
推荐指数
4
解决办法
5457
查看次数

如何为自定义类型扩展std :: tr1 :: hash?

如何允许STL实现获取我的自定义类型?在MSVC上,有一个类std::tr1::hash,我可以通过使用来部分专门化

namespace std 
{
    namespace tr1 
    { 
        template <> 
        struct hash<MyType> 
        { ... };
    } 
}
Run Code Online (Sandbox Code Playgroud)

但这是推荐的方式吗?此外,这是否也适用于GCC的实施?因为boost::hash,它足以提供免费功能size_t hash_value (const MyType&),是否有类似的TR1实现?

c++ tr1

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