标签: wrapper

如何在C#项目中使用C代码?包装类?

我有一个C代码,我想在C#中使用它.

除了重写这段代码之外,还有可能吗?

c c# interop wrapper

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

我可以围绕NUnit,MbUnit,xUnit或其他测试框架创建一个包装器吗?

如何围绕测试框架创建包装器?我们仍然不知道将使用哪个测试框架,但我需要开始编写单元测试.有了这个问题,我想知道如何从NUnit切换到mbUnit,xUnit甚至是MSTest.

mbunit nunit mstest xunit wrapper

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

在包装C库的C++类中抛出什么?

我必须C++围绕现有的C库创建一组包装类.

对于C库的许多对象,构造是通过调用类似britney_spears* create_britney_spears()和相反的函数来完成的void free_britney_spears(britney_spears* brit).

如果分配britney_spears失败,则create_britney_spears()返回NULL.

据我所知,这是一种非常常见的模式.

现在我想把它包装在一个C++类中.

//britney_spears.hpp

class BritneySpears
{
  public:

    BritneySpears();

  private:

    boost::shared_ptr<britney_spears> m_britney_spears;
};
Run Code Online (Sandbox Code Playgroud)

以下是实施:

// britney_spears.cpp

BritneySpears::BritneySpears() :
  m_britney_spears(create_britney_spears(), free_britney_spears)
{
  if (!m_britney_spears)
  {
    // Here I should throw something to abort the construction, but what ??!
  }
}
Run Code Online (Sandbox Code Playgroud)

所以问题出在代码示例中:我应该抛弃什么来中止构造函数?

我知道我几乎可以扔任何东西,但我想知道通常做什么.我没有关于分配失败原因的其他信息.我应该创建自己的异常类吗?std这种情况有例外吗?

非常感谢.

c c++ memory-management exception wrapper

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

自动将c ++ dll自动换行到c#

我想在ac#project中使用c ++库.是否有任何包装工具可以自动导入所有类?

c# c++ dll wrapper

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

Java中Wrapper类的行为

可能重复:
为什么128 == 128返回false但127 == 127在此代码中返回true?

下面的Java代码返回true

Integer i1=1;
Integer i2=1;
System.out.println(i1==i2);
Run Code Online (Sandbox Code Playgroud)

那么我们在Java中使用String文字常量池的概念的方式,在Java中包装类的情况下我们是否也有类似的概念?

java wrapper

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

Python中的包装类

我想要一个包装类,其行为与它包装的对象完全相同,只是它添加或覆盖了一些select方法.

我的代码目前看起来像这样:

# Create a wrapper class that equips instances with specified functions
def equipWith(**methods):

  class Wrapper(object):
    def __init__(self, instance):
      object.__setattr__(self, 'instance',instance)

    def __setattr__(self, name, value):
      object.__setattr__(object.__getattribute__(self,'instance'), name, value)

    def __getattribute__(self, name):
      instance = object.__getattribute__(self, 'instance')

      # If this is a wrapped method, return a bound method
      if name in methods: return (lambda *args, **kargs: methods[name](self,*args,**kargs))

      # Otherwise, just return attribute of instance
      return instance.__getattribute__(name)

  return Wrapper
Run Code Online (Sandbox Code Playgroud)

为了测试这个,我写道:

class A(object):
  def __init__(self,a):
    self.a = a

a = A(10)
W = …
Run Code Online (Sandbox Code Playgroud)

python wrapper

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

C#链接参数函数调用

是否有可能在C#中接受一个params参数,然后将其作为params列表传递给另一个函数?如上所述,如果我没有弄错的话,下面的函数将args作为一个类型数组的单个参数传递object.这里的目标是不言而喻的.

//ScriptEngine
public object[] Call(string fnName, params object[] args)
{
    try{
        return lua.GetFunction(fnName).Call(args);
    }
    catch (Exception ex)
    {
        Util.Log(LogManager.LogLevel.Error, "Call to Lua failed: "+ex.Message);
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

lua.GetFunction(fnName).Call(args);是对我的代码之外的调用,它接受param object[].

c# wrapper params

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

在Swift中使用C函数,将函数作为参数

我正在写一个C数学库的包装器.每个函数都将一个或两个函数作为参数.但是,这些子函数(以及父函数)的参数不是Swifty -hence包装器.

我已经清理了示例代码,只显示了三个主要部分:c-library函数,将传递给包装器的所需Swift函数(未显示的主体,但包围c-library函数),以及所需的C函数形式.

//C library function, that calls the passed function dozens, hundreds or thousands of times, each time it changes the data provided in p, and uses the output from x
//The Swift arrays are passed as pointers, and the length of the and x array are m and n respectively
returnValue = cLibraryFunc(passedFunc, &p, &x, Int32(m), Int32(n), Int32(itmax), &opts, &info, &work, &covar, &adata)


//I would like to create a Swift function that would look like this (internals could …
Run Code Online (Sandbox Code Playgroud)

c wrapper swift unsafemutablepointer

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

将链表包装在仅包含列表头部的另一个结构中是不正确的做法还是反模式?

例如,使用C,假设我定义了一个这样的节点:

typedef struct nde {
    int val;
    struct nde* next;
}node;
Run Code Online (Sandbox Code Playgroud)

然后我用这样的东西"包裹"它:

typedef struct lst {
    node* head;
}list;
Run Code Online (Sandbox Code Playgroud)

我具体是指这个案子.我知道如果你想要包含其他信息,使用包装器会很有用,但如果它只包含指向头部的指针,那么它被认为是"不好的做法"吗?对我来说这是一种更直观的方式,主要是因为在推送或弹出或使用其他功能时,你总是会取消引用,命名约定也更有意义.

c standards anti-patterns wrapper

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

struct / class包装中的C ++重载自动运算符

想象一下,您有一个简单的2D点对象,其中包含两个设置器和获取器。

template <typename T>
class Point
{
public:
    Point(T x, T y);

    T getX() const;
    T getY() const;

    void setX(T x);
    void setY(T y);

private:
    T _x;
    T _y;
};
Run Code Online (Sandbox Code Playgroud)

但是我想以更“类似于脚本”的语法来使用此类。就像是 :

auto point = Point<double>(10, 10);
point.x = 20;
point.y = point.x + 10;
Run Code Online (Sandbox Code Playgroud)

您会说,只需使用带有公共变量的结构:

template <typename T>
struct Point
{
    T x;
    T y;
};
Run Code Online (Sandbox Code Playgroud)

是的,但是我想保留参数的私密性,并使用某些方法扩展类。因此,另一个想法是制作一个包装助手,将操作符别名添加到setters / getters中:

template <typename T, typename Get,  Get(T::*Getter)() const,
                      typename Set, void(T::*Setter)(Set)>
struct ReadWrite
{
    ReadWrite(T& ptr) : ptr(ptr) {}

    inline void …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading wrapper template-meta-programming auto

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