标签: wrapper

将头文件包含到头文件中而不将其内容暴露给包含器

我想为 C API 编写一个 C++ 包装器。为此,最方便的方法是将 C-API 标头包含在我自己的标头中,但这也将标头包含到外部系统的文件中,该文件不应暴露给 C-API。

capi.h

enum MyFlags {
    MY_FLAG_A,
    MY_FLAG_B,
};

void FOO_bar(int flags);
Run Code Online (Sandbox Code Playgroud)

cppapi.hh

#include "capi.h"

enum class MyFlags { 
    A = MY_FLAG_A, 
    B = MY_FLAG_B 
};

namespace foo {
    void bar(MyFlags flags) { 
        FOO_bar((int)flags); 
    }
}
Run Code Online (Sandbox Code Playgroud)

它只是将c命名约定翻译成c++语言特性。因此,当使用该语言的 C++ 变体时,我希望 c_api 不可用于我的自动完成,因此不会意外使用。

c++ header wrapper

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

为什么包装类没有类似于 Stringpool 的池?

Integer、Character、Double 等——所有这些都是像 String 这样的不可变类。String 有 Stringpool 来节省内存,但为什么这些包装器没有类似的池?

我检查过:Integer 有一个类似的池,最多只有 127 个,但不会更多。

java string wrapper string-pool

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

创建在原始函数中设置关键字参数的部分函数

不确定这是否可能,但我正在尝试从具有位置和关键字参数的函数创建部分函数。问题是,我希望结果部分函数中的参数设置原始函数中的关键字参数之一 - 而不是其位置参数之一。

这是原始函数的定义:

def cost_function(self, X, y, weights=None, lambda_param=0.0):
Run Code Online (Sandbox Code Playgroud)

我想要一个可以传递给 scipy.minimise 的部分函数,​​这样我就可以找到最佳权重值(权重是一个 ndarray)。

所以我需要的是一个只有一个参数的部分函数(x 说):

例如

cost_func(x)
Run Code Online (Sandbox Code Playgroud)

但我希望部分函数在调用原始函数时设置权重参数:

my_network.cost_function(X, y, weights=x, lambda_param=0.0)
Run Code Online (Sandbox Code Playgroud)

(我知道我可以更改原始函数,以便权重参数是位置参数而不是关键字参数,但我不想这样做,因为我也想在没有权重参数集的情况下使用该函数)。

python arguments wrapper partial functools

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

C++ 包装类的设计

我必须使用一个界面非常笨拙的旧类。由于我无法更改它并且依赖它,因此我想构建一个包装器,提供一个干净的界面。假设我有一堂课ClumsyClass。基本上,我有三种方法:

1. 参考会员

    Class Wrapper {
      public:
        Wrapper (ClumsyClass& clumsyClass)
          : m_clumsyClass(clumsyClass)
        { }

        int getSmth() {
          return m_clumsyClass.getSmth();
        }

        private:
          ClumsyClass& m_clumsyClass;
}
Run Code Online (Sandbox Code Playgroud)

2. 指针成员

    Class Wrapper {
      public:
        Wrapper (ClumsyClass* clumsyClass)
          : m_clumsyClass(clumsyClass)
        { }

        int getSmth() {
          return m_clumsyClass->getSmth();
        }

        private:
          ClumsyClass* m_clumsyClass;
}
Run Code Online (Sandbox Code Playgroud)

3、继承

    Class Wrapper : public ClumsyClass {
    ...
}
Run Code Online (Sandbox Code Playgroud)

哪种方法是实现包装器的“最干净”方法?我更喜欢第三个,但是当我已经有一个 ClumsyClass 对象然后创建一个 Wrapper 对象(复制构造函数)时,将需要更多内存(因为在我的情况下需要原始类的实例)。

c++ design-patterns wrapper

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

装饰器与没有包装器的函数 - Python

我目前正在尝试了解装饰器是什么以及它们的用途。到目前为止,我了解到它们只是传递和返回函数作为参数的函数,它们的目的是修改函数而不修改原始函数。

我的问题与用于定义它们的经典结构有关。通常,您定义一个装饰器函数,并在其中定义另一个称为包装器的函数,该函数由装饰器函数返回。

所以我的问题是,为什么在装饰器内部创建包装器,而它可以只用一个函数来完成?这样做不是更“Pythonic”吗?

例如以下2段代码:

def country(func):
    def wrapper_function():
        print("The name of my favorite country is: ")
        return func()
    return wrapper_function

@country # == fav_country = country(fav)
def fav():
    print("Sweden")

fav()
Run Code Online (Sandbox Code Playgroud)

输出:

我最喜欢的国家的名字是:

瑞典

def country(func):
    print("The name of my favorite country is: ")
    return func

@country # == fav_country = country(fav)
def fav():
    print("Sweden")

fav()
Run Code Online (Sandbox Code Playgroud)

输出: 我最喜欢的国家的名字是:

瑞典

python function decorator wrapper

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

让 AVPlayer 的 SwiftUI 包装器在视图消失时暂停

长话短说

\n\n

似乎无法使用绑定来告诉wrappedAVPlayer停止\xe2\x80\x94 为什么不呢?弗拉德的“一个奇怪的技巧” 对我来说很有效,没有状态和绑定,但为什么呢?

\n\n

也可以看看

\n\n

我的问题与此类似,但该海报想要包装一个AVPlayerViewController,我想以编程方式控制播放。

\n\n

这家伙也想知道什么时候updateUIView()被叫到的。

\n\n

发生了什么(控制台日志如下所示。)

\n\n

使用如下所示的代码,

\n\n
    \n
  • 用户点击“去看电影”

    \n\n
      \n
    • MovieView出现并播放视频
    • \n
    • 这是因为updateUIView(_:context:)被称为
    • \n
  • \n
  • 用户点击“返回主页”

    \n\n
      \n
    • HomeView再次出现
    • \n
    • 播放停止
    • \n
    • 再次updateUIView被呼叫。
    • \n
    • 请参阅控制台日志 1
    • \n
  • \n
  • 但是...删除该###行,然后

    \n\n
      \n
    • 即使返回主视图,播放也会继续
    • \n
    • updateUIView抵达时会接到电话,但离开时不会接到电话
    • \n
    • 请参阅控制台日志 2
    • \n
  • \n
  • 如果您取消注释%%%代码(并注释掉其前面的内容)

    \n\n
      \n
    • 你得到的代码我认为在逻辑上和惯用上都是正确的 SwiftUI...
    • \n
    • ...但是“它不起作用”。即,视频在抵达时播放,但在离开时继续播放。
    • \n …

data-binding wrapper avplayer swiftui

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

试图理解 Python 包装器

对于下面的功能,我试图理解

一世。为什么wrapper.count = 0在包装函数下面初始化?为什么不在 def counter(func) 下初始化?为什么wrapper.count 没有将其重置wrapper.count为0,因为它在wrapper 函数下方运行?

我试图了解什么是wrapper.count?为什么不初始化一个普通变量count而不是wrapper.count

def counter(func):
  def wrapper(*args, **kwargs):
    wrapper.count += 1
    # Call the function being decorated and return the result
    return func
  wrapper.count = 0
  # Return the new decorated function
  return wrapper

# Decorate foo() with the counter() decorator
@counter
def foo():
  print('calling foo()')
Run Code Online (Sandbox Code Playgroud)

python function decorator wrapper

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

为什么 C 语言编程需要 Fortran 包装器?

我最近在读cBLAS的一些源代码,有些事情让我不清楚。在许多函数中,.c 文件调用 Fortran Wrapper,而不是直接在 C 文件中编写代码,如下文件:

/*
 * cblas_sdsdot.c
 *
 * The program is a C interface to sdsdot.
 * It calls the fortran wrapper before calling sdsdot.
 *
 * Written by Keita Teranishi.  2/11/1998
 *
 */
#include "cblas.h"
#include "cblas_f77.h"
float cblas_sdsdot( const int N, const float alpha, const float *X,
                      const int incX, const float *Y, const int incY)
{
   float dot;
#ifdef F77_INT
   F77_INT F77_N=N, F77_incX=incX, F77_incY=incY;
#else 
   #define F77_N N
   #define F77_incX incX
   #define F77_incY incY …
Run Code Online (Sandbox Code Playgroud)

c fortran wrapper blas

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

将 C printf() 调用包装在预处理器指令中

我正在尝试将 C 代码从一个平台移植到另一个平台并删除依赖项。

有一个名为的调试函数dbg_out,它打印出类似printf().

原型是void dbg_out(int dbgMask, const char *pFormat, ...);

这是一个调用示例:dbg_out((5, "SerialDriver : (%04x-%08lx) \n", id, sn));

我想将此函数映射到正常printf()调用,但遇到一些问题。

到目前为止我已经尝试过了

void dbg_out (int dbgMask, const char *pFormat, ...)
__attribute__((format(printf, 2, 3)))
;    
Run Code Online (Sandbox Code Playgroud)

我需要忽略第一个参数 dbgMask 并只考虑其他参数。

我更喜欢使用预处理器来定义包装器。我希望得到一些帮助。

c printf wrapper c-preprocessor preprocessor-directive

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

React Router Dom v6:在路由更改时滚动到顶部

我在 Reactjs 上创建了一个网站,并使用“react-router-dom v6”链接了各个页面。每当我从一个页面转换到另一个页面时,第二页总是加载到当前位置而不是顶部。我已经尝试了很多教程和解决方案,但它们在react-router-dom v5之前都有效。

scroll wrapper react-router-dom

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