小编woh*_*tad的帖子

如何实现-在__del__上写入文件?

我正在尝试对类 obj 销毁进行一些活动。如何实现文件打开__del__功能?(我使用的是Python 3.4)

class iam(object):

    def __init__(self):
        print("I m born")

    def __del__(self):
        f = open("memory_report.txt", "w")
        f.write("He gone safe")
        f.close()
    
if __name__ == '__main__':
    i = iam()
    print("Script Ends. Now to GC clean memory")


Output:
Run Code Online (Sandbox Code Playgroud)
I m born
Script Ends. Now to GC clean memory
Exception ignored in: <bound method iam.__del__ of <__main__.iam object at 0x00000000022F1A58>>
Traceback (most recent call last):
  File "F:\Kumaresan\Code\Python\CommonLib\src\kmxPyQt\devConsole3\tet.py", line 14, in __del__
NameError: name 'open' is not defined    
Run Code Online (Sandbox Code Playgroud)

python memory garbage-collection destructor del

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

如何实现“stack run --file-watch”

我使用 Haskell 堆栈并找到了--file-watchopton,但随后惊讶地发现它适用于build但不适用于run. 在网上搜索发现有一些方法可以stack run --file-watch 通过其他命令来实现(script?)的效果,但我找不到简单直接的解决方案。有吗?

haskell haskell-stack

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

C++ 模板类错误:函数返回函数

我想制作一个简单的记录器,它自动运行函数并返回其值。
该类定义为:

template <typename R, typename... Args>
class Logger3
{

    Logger3(function<R(Args...)> func,
            const string& name):
        func{func},
        name{name}
    {}
    R operator() (Args ...args)
    {
        cout << "Entering " << name << endl;
        R result = func(args...);
        cout << "Exiting " << name << endl;
        return result;
    }
    function<R(Args...)> func;
    string name;
};
Run Code Online (Sandbox Code Playgroud)

我想将以下简单add函数传递给记录器:

int add(int a, int b)
{
    cout<<"Add two value"<<endl;

    return a+b;
}
Run Code Online (Sandbox Code Playgroud)

通过这样调用它:

auto caller = Logger3<int(int,int)>(add,"test");
Run Code Online (Sandbox Code Playgroud)

但是,它会产生以下错误:

error: function returning a function
  133 |     Logger3(function<R(Args...)> …
Run Code Online (Sandbox Code Playgroud)

c++ templates std-function

5
推荐指数
2
解决办法
294
查看次数

在调用 condition_variable::notify() 之前是否需要锁定互斥体?

我正在阅读一些示例代码condition_variable

在 cppreference 中,notify_one()这样调用: https://en.cppreference.com/w/cpp/thread/condition_variable

{
    std::lock_guard lk(m);
    ready = true;
    std::cout << "main() signals data ready for processing\n";
}
cv.notify_one();
Run Code Online (Sandbox Code Playgroud)

从上面的代码可以清楚地看出,没有必要使用anymutex来调用notify_one().

但在cplusplus.com,代码是这样的: https ://cplusplus.com/reference/condition_variable/condition_variable/

std::unique_lock<std::mutex> lck(mtx);
ready = true;
cv.notify_all();
Run Code Online (Sandbox Code Playgroud)

看来应该mutex在调用之前使用a notify_all()

我很困惑,这是功能mutex所必需的吗notify_*()

c++ mutex

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

File.ReadAllBytes 无法正确读取 PNG 图像像素

我正在尝试使用方法读取 .png 图像的字节,File.ReadAllBytes(string)但没有成功。

我的图像大小为 2464x2056x3(15.197.952 字节),但此方法返回大约 12.000.000 字节的数组。

我尝试使用相同大小的白色图像,得到一个 25.549 的字节数组,并检查字节数组,我可以看到所有类型的值,这显然是不正确的,因为它是白色图像。

我正在使用的代码是:

var frame = File.ReadAllBytes("C:\\workspace\\white.png");
Run Code Online (Sandbox Code Playgroud)

我还尝试首先将图像作为图像对象打开,然后使用以下内容获取字节数组:

using (var ms = new MemoryStream())
{
  var imageIn = Image.FromFile("C:\\workspace\\white.png");
  imageIn.Save(ms, imageIn.RawFormat);
  var array = ms.ToArray();
}
Run Code Online (Sandbox Code Playgroud)

但结果还是和之前一样……

知道发生了什么吗?

如何读取字节数组?

c# arrays png image

4
推荐指数
1
解决办法
1008
查看次数

使用 RGBA 通道顺序的像素数据初始化 OpenCV Mat

你好,

我正在用 C++ 为 Adob​​e After Effects 编写一个效果插件,我需要cv::Mat使用内存中已有的像素数据创建一个效果插件。但是,当我使用以下方法初始化它时:

cv::Mat in_frame_mat(height, width, CV_8UC4, input->data);
Run Code Online (Sandbox Code Playgroud)

(输入->数据是指向第一个字节的指针),输出全是蓝色。
我认为这是因为 AE 存储像素数据 RGBA 或 ARGB,而 OpenCV 假设 BGRA 或 ABGR(不确定是哪一个)。

我知道我可以迭代每个像素并在内存中创建一个新空间来存储图像的 BGRA 表示,然后cv::Mat初始化 a ,但这确实会限制性能,我不想增加不必要的计算时间。

有没有办法cv::Mat使用存储 RGBA 的现有像素数据来创建?

谢谢!

c++ opencv

4
推荐指数
1
解决办法
903
查看次数

为“矩形二维数组”动态分配连续内存,而不使用 VLA

这是有很多答案但没有一个能解决具体问题的问题之一。

\n

我尝试查看所有这些帖子 \xe2\x80\x94\n 1 2 3 4 5 6 7 8 9 \ xe2\x80\x94 ,每次解决方案都是使用 VLA、使用具有固定尺寸的普通数组,或使用指针到指针。

\n

我想要的是分配:

\n
    \n
  • 动态(使用运行时设置的变量)
  • \n
  • 矩形(“二维数组”)(我不需要锯齿状数组。而且我想无论如何都不可能做到这一点。)
  • \n
  • 连续内存(在#8和其他一些帖子中,人们说指向指针的指针不好,因为堆的东西和碎片)
  • \n
  • 没有 VLA(我听说它们是魔鬼,要始终避免它们,并且不要与建议在任何情况下使用它们的人交谈)。
  • \n
\n

所以,如果我跳过了一篇文章,或者没有读得足够透彻,满足了这些要求,请指出它。
\n否则,我会要求您对此进行教育,并告诉我这是否可能,如果可能,该怎么做。

\n

c dynamic-memory-allocation

4
推荐指数
1
解决办法
662
查看次数

constexpr 上下文中运算符 &amp;&amp; 的奇怪行为

以下代码尝试根据参数包中传递的最后一个参数做出编译时决策。如果参数包参数的数量 > 0,它包含一个比较,然后尝试获取它的最后一个元素。但是,构造的元组是在无效索引处访问的,该索引据称大于最大元组索引(如图所示static_assert)。
如果我这样做怎么可能cnt-1

演示

#include <cstdio>
#include <concepts>
#include <utility>
#include <tuple>


template <typename... Args>
auto foo(Args&&... args)
{
    auto tuple = std::forward_as_tuple(std::forward<Args>(args)...);
    constexpr std::size_t cnt = sizeof...(Args);

    if constexpr (cnt > 0 && std::same_as<std::remove_cvref_t<std::tuple_element_t<cnt-1, decltype(tuple)>>, int>) {
        printf("last is int\n");
    } else {
        printf("last is not int\n");
    }
}

int main()
{
    foo(2);

    foo();
}
Run Code Online (Sandbox Code Playgroud)

错误:

/opt/compiler-explorer/gcc-12.2.0/include/c++/12.2.0/tuple: In instantiation of 'struct std::tuple_element<18446744073709551615, std::tuple<> >':
<source>:13:25:   required from 'auto foo(Args&& ...) [with Args = {}]' …
Run Code Online (Sandbox Code Playgroud)

c++ tuples and-operator if-constexpr

4
推荐指数
1
解决办法
133
查看次数

我可以用 AND 替换 if 语句吗?

我的教授曾经说过,if 语句相当慢,应该尽可能避免。我正在用 OpenGL 制作一个游戏,我需要很多它们。在我的测试中,通过短路将 if 语句替换为 AND 是有效的,但是它更快吗?

bool doSomething();

int main()
{

  int randomNumber = std::rand() % 10;

  randomNumber == 5 && doSomething();

  return 0;
}

bool doSomething()
{
    std::cout << "function executed" << std::endl;

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

我的目的是在渲染器的绘制函数中使用它。我的模型应该有标志,如果标志为真,则应该执行某个函数。

c++ if-statement logical-operators

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

std::visit 不接受作为派生类对象的可调用对象

我正在尝试使用std::visit来检查std::variant.
首先,我声明变体和变体的基(可调用)访问者类:

#include <iostream>
#include <string>
#include <variant>


using Amalgamation = std::variant<int, bool, std::string>;

class BaseVisitor {
public:
    virtual void operator()(int) {}
    virtual void operator()(bool) {}
    virtual void operator()(const std::string&) {}
};
Run Code Online (Sandbox Code Playgroud)

其次,我定义了另一个从上面的基类派生的访问者类:

class CheckBooleanVisitor
    : public BaseVisitor {
public:
    CheckBooleanVisitor()
        : m_isBoolean(false) {
    }

    virtual void operator()(bool) override { // WHERE THE OVERRIDING TAKES PLACE
        m_isBoolean = true;
    }

    bool isBoolean() const {
        return m_isBoolean;
    }
};
Run Code Online (Sandbox Code Playgroud)

我使用这个“派生”访问者类来访问如下变体:

int main() {
    Amalgamation a(0);
    Amalgamation b(false); …
Run Code Online (Sandbox Code Playgroud)

c++ std variant c++17

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