小编Der*_*ren的帖子

当我覆盖C++函数时,我应该再次指定'virtual'吗?

当我覆盖虚函数时:

class Geoff
{
 public:
  virtual int getArea() { return 0; }
}
Run Code Online (Sandbox Code Playgroud)

当我覆盖它时,我应该再次指定'virtual'吗?它有什么不同吗?我知道两种方式似乎都很好,只是想知道它是否还有更多.

class George : public Geoff
{
 public:
  virtual int getArea() { return x*y; }
}
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism

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

C#interop:固定和MarshalAs之间的不良交互

我需要将C#4.0中的一些嵌套结构封装成二进制blob以传递给C++框架.

到目前为止,我使用unsafe/ fixed处理原始类型的固定长度数组已经取得了很大的成功.现在我需要处理一个包含其他结构的嵌套固定长度数组的结构.

我正在使用复杂的变通方法来展平结构,但后来我遇到了一个MarshalAs属性的例子,看起来它可以省去很多问题.

不幸的是,虽然它给了我正确的数据,它似乎也阻止了fixed阵列被正确编组,正如该程序的输出所示.您可以通过在最后一行放置断点并检查每个指针的内存来确认失败.

using System;
using System.Threading;
using System.Runtime.InteropServices;

namespace MarshalNested
{
  public unsafe struct a_struct_test1
  {
    public fixed sbyte a_string[3];
    public fixed sbyte some_data[12];
  }

  public struct a_struct_test2
  {
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
    public sbyte[] a_string;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
    public a_nested[] some_data;
  }

  public unsafe struct a_struct_test3
  {
    public fixed sbyte a_string[3];
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
    public a_nested[] some_data;
  }


  public unsafe struct a_nested
  {
    public fixed …
Run Code Online (Sandbox Code Playgroud)

c# interop unsafe marshalling

14
推荐指数
1
解决办法
596
查看次数

将OAuth2添加到iOS项目

我真的在努力将OAuth2纳入项目.我查看了所有不同的OAuth客户端,但文档很少,示例项目已过时.我想做的就是获取一个auth令牌,我的clientID和秘密硬编码并使用ARC /故事板.

我已经通过nxtbgthng尝试了OAuthConsumer,LROAuth2Client,GTM-OAuth2,OAuth2Client.任何教程,基本示例应用程序,或者你可以指出我会很棒.我能找到的唯一示例应用程序是旧的,而不是使用ARC或故事板.

iphone oauth objective-c ipad ios

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

NULL 合并字典查找

一直困扰我的一件事是完成这个非常简单(对我的工作来说,非常常见)的操作需要多少行代码:

  var lTheDict = new Dictionary<string, object>();
  // The dictionary gets some stuff put in it elsewhere...

  // Do annoying lookup that must be common but is always unwieldy.
  object lTheObject;
  int lTheValue; // NOTE: Not always an int
  if (lTheDict.TryGetValue("TheKey", out lTheObject))
  {
    lTheValue = (int) lTheObject;
  }
Run Code Online (Sandbox Code Playgroud)

我相信一定有更好的方法来做到这一点,也许是空合并或其他东西。我真正希望能够写的是:

  int lTheValue ?= (int) lTheDict["TheKey"];
Run Code Online (Sandbox Code Playgroud)

换句话说,如果 TheKey 存在,就给我值,否则就给我“空”int。

几乎不可能刮掉线条。即使我们只是尝试查找和转换并在单行捕获和忽略上捕获异常(我的工作场所代码风格都不允许),我们仍然必须在 try 块之外声明变量,并最终得到类似的东西:

  int lTheValue;
  try {
    lTheValue = (int) lTheDict["TheKey"];
  } catch (Exception ex) { }
Run Code Online (Sandbox Code Playgroud)

这又是一个荒谬的开销代码,掩盖了一个非常明显的操作。

即使只是为了能够通过在我们将它用作 outparam …

c# collections

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

标签 统计

c# ×2

c++ ×1

collections ×1

interop ×1

ios ×1

ipad ×1

iphone ×1

marshalling ×1

oauth ×1

objective-c ×1

polymorphism ×1

unsafe ×1