小编Mar*_*lon的帖子

为什么不能将匿名方法分配给var?

我有以下代码:

Func<string, bool> comparer = delegate(string value) {
    return value != "0";
};
Run Code Online (Sandbox Code Playgroud)

但是,以下内容无法编译:

var comparer = delegate(string value) {
    return value != "0";
};
Run Code Online (Sandbox Code Playgroud)

为什么编译器无法弄清楚它是Func<string, bool>什么?它需要一个字符串参数,并返回一个布尔值.相反,它给了我错误:

无法将匿名方法分配给隐式类型的局部变量.

我有一个猜测,那就是如果编译var版本,如果我有以下内容,它将缺乏一致性:

var comparer = delegate(string arg1, string arg2, string arg3, string arg4, string arg5) {
    return false;
};
Run Code Online (Sandbox Code Playgroud)

上面没有意义,因为Func <>只允许最多4个参数(在.NET 3.5中,这就是我正在使用的).也许有人可以澄清这个问题.谢谢.

c# lambda delegates implicit-typing .net-3.5

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

隐藏C结构中的成员

我一直在读C中的OOP,但我从来不喜欢你不能在C++中拥有像你这样的私人数据成员.但后来我想到你可以创建2个结构.一个在头文件中定义,另一个在源文件中定义.

// =========================================
// in somestruct.h
typedef struct {
  int _public_member;
} SomeStruct;

// =========================================
// in somestruct.c

#include "somestruct.h"

typedef struct {
  int _public_member;
  int _private_member;
} SomeStructSource;

SomeStruct *SomeStruct_Create()
{
  SomeStructSource *p = (SomeStructSource *)malloc(sizeof(SomeStructSource));
  p->_private_member = 42;
  return (SomeStruct *)p;
}
Run Code Online (Sandbox Code Playgroud)

从这里你可以将一个结构投射到另一个结构.这被认为是不好的做法吗?还是经常这样做?

c struct private-members

61
推荐指数
6
解决办法
3万
查看次数

将列表序列化为JSON

我在客户端和Django服务器之间发送信息,我想使用JSON.我发送简单的信息 - 字符串列表.我试过用django.core.serializers,但是当我做的时候,我得到了

AttributeError: 'str' object has no attribute '_meta'
Run Code Online (Sandbox Code Playgroud)

看来这只能用于Django对象.如何序列化简单的Python对象?

python django serialization json

44
推荐指数
2
解决办法
13万
查看次数

protected vs public构造函数用于抽象类?有区别吗?

这个问题出于好奇.是否有区别:

public abstract class MyClass
{
    public MyClass()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

public abstract class MyClass
{
    protected MyClass()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

c# constructor protected public

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

函数的模板推导基于其返回类型?

我希望能够使用模板推导来实现以下目标:

GCPtr<A> ptr1 = GC::Allocate();
GCPtr<B> ptr2 = GC::Allocate();
Run Code Online (Sandbox Code Playgroud)

而不是(我现在拥有的):

GCPtr<A> ptr1 = GC::Allocate<A>();
GCPtr<B> ptr2 = GC::Allocate<B>();
Run Code Online (Sandbox Code Playgroud)

我目前的Allocate功能如下所示:

class GC
{
public:
    template <typename T>
    static GCPtr<T> Allocate();
};
Run Code Online (Sandbox Code Playgroud)

这将是可能敲掉多余的<A><B>

c++ templates template-argument-deduction

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

C++构造函数:初始化const引用时的垃圾

这段代码出了什么问题,为什么我得错了答案:

class X
{
private:
        const int a;
        const int& b;
public:
        X(): a(10) , b(20)
        {
        //      std::cout << "constructor : a " << a << std::endl;
        //      std::cout << "constructor : b " << b << std::endl;
        }

        void display()
        {
            std::cout << "display():a:" << a << std::endl;
            std::cout << "display():b:" << b << std::endl;

        }
};


int
main(void)
{
        X x;
        x.display();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码会给我结果

display():a:10
display():b:1104441332
Run Code Online (Sandbox Code Playgroud)

但是如果我删除默认构造函数中的注释2行,它给出了正确的结果

constructor : a 10
constructor : b 20 …
Run Code Online (Sandbox Code Playgroud)

c++ constructor const reference

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

PNG文件格式字节顺序?

我不确定endian是否是正确的词,但..

我一直在解析PNG文件,我注意到所有的整数值都是大端的.这是真的?

例如,宽度和高度作为32位无符号整数存储在PNG文件中.我的图像是16x16,在文件中存储为:

00 00 00 10
Run Code Online (Sandbox Code Playgroud)

应该是什么时候:

10 00 00 00
Run Code Online (Sandbox Code Playgroud)

这是真的还是我缺少的东西?

png endianness

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

在枚举中指定基础类型的用例是什么?

有什么意义

enum SomeEnum : byte // <----
{
  SomeValue = 0x01,
  ...
}
Run Code Online (Sandbox Code Playgroud)

当你必须进行转换只是为了将它分配给与枚举基础类型相同类型的变量?

byte b = (byte)SomeEnum.SomeValue;
Run Code Online (Sandbox Code Playgroud)

c# enums types

18
推荐指数
1
解决办法
5635
查看次数


有没有办法使用模板专门化来分隔new和new []?

我有一个自动指针类,在构造函数中我传入一个指针.我希望能够从新的[]在构造函数中分离出来的新,这样我可以正确地调用删除或析构函数删除[].这可以通过模板专业化来完成吗?我不想在构造函数中传入一个布尔值.

    template <typename T>
    class MyAutoPtr
    {
    public:
      MyAutoPtr(T* aPtr);
    };

// in use:
MyAutoPtr<int> ptr(new int);
MyAutoPtr<int> ptr2(new int[10]);
Run Code Online (Sandbox Code Playgroud)

c++ templates specialization

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