小编cer*_*wny的帖子

在核心生成期间压缩核心文件

在linux 2.6.x中,有没有办法在核心转储生成过程中压缩核心文件?基本上,存储空间在我们的系统中是有限的,因此我们无法生成完整的核心文件然后gzip相同.

问候,Prabhakar

linux kernel

12
推荐指数
1
解决办法
8395
查看次数

c ++ auto有多种选择

在我与项目的冒险中,我意识到如果我想根据条件初始化参数,我不能利用新的c ++ 11 auto关键字的优势.

基本上我有一个像这样的代码片段:

auto foo = bar::getfoo();
Run Code Online (Sandbox Code Playgroud)

需要改为:

FOO foo
if(cond){
   foo = bar::getfoo();
} else {
  foo = baz::getotherfoo();
}
Run Code Online (Sandbox Code Playgroud)

但后来我需要用类型声明foo(因为编译器不能知道我将使用相同类型的返回.我想知道在这种情况下是否有任何使用auto关键字的方法.另一个解决方案是我想到的是使用带有这样代码的?:运算符:

auto foo = cond ? bar::getfoo() : baz::getotherfoo();
Run Code Online (Sandbox Code Playgroud)

但如果有两个以上的功能可供选择,我真的不想连锁吗?:运营商.我想知道在这种情况下是否有任何好的模式.

c++ c++11

7
推荐指数
2
解决办法
434
查看次数

模板参数相关[[nodiscard]]

我有一个功能对象,它是另一个功能的包装:

template <typename FuncT>
class Wrapper
{
    private:
        FuncT funcToWrap;

    public:
        Wrapper(FuncT ftw) : funcToWrap(ftw){};

        template<typename ...ARG>
        typename std::result_of<FuncT(ARG&&...)>::type operator()(ARG&&... args){
            return funcToWrap(std::forward<ARG>(args)...);
        }
};

int main(){
    std::function<void()> testfunc = [](){ std::cout << "Test" << std::endl; };
    Wrapper<decltype(testfunc)> test{testfunc};
    test();
}
Run Code Online (Sandbox Code Playgroud)

我想这样做是为了纪念operator()[[nodiscard]]如果std::result_of<FuncT(ARG&&...)>::type不是void

我注意到的是,当我将[[nodiscard]]返回类型的模板评估的情况设为时void,它将被编译器忽略。

这是我可以依靠的行为吗?

c++ attributes c++17

7
推荐指数
1
解决办法
326
查看次数

Perl获取每个对象的函数

我是Perl的新手,所以我不知道它是否可行.我有兴趣创建一个可以捕获所有调用的模块.

它的用法如下:

$object = new Foo;
$object->blah;
Run Code Online (Sandbox Code Playgroud)

函数名称(所以在这种情况下"blah"会被Foo咳嗽并作为字符串返回到屏幕).

我不知道怎么做的是将被调用的函数名称作为字符串.

perl

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

应用程序崩溃时如何生成 Windows 内存转储。?

是否有一种简单的方法可以为崩溃的应用程序生成内存转储?

我有一种情况,客户收到了产生崩溃的代码,因为代码本身没有用于中止时回溯生成的信号处理程序我想知道是否有一种简单的方法可以告诉 Windows 生成内存转储崩溃的应用程序。

理想的解决方案不涉及调试工具的安装(或代码修改),但如果这是不可能的,知道这将非常有帮助。

windows crash crash-dumps

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

析构函数直接用C++调用

因此下面的代码.

class A
{
    int x;
public:
    A() {x = 3;}
};


int main()
{
    void* mem = operator new(sizeof(A));
    A* obj = static_cast<A*>(new(mem)(A));
    std::cout << obj->x << std::endl;
    obj->A::~A();
    std::cout << obj->x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是:为什么我可以直接调用A的析构函数; 我的第二个问题是:为什么输出是:

3
3
Run Code Online (Sandbox Code Playgroud)

在析构函数调用后,对象obj不会被删除?第二个困扰我.

c++ destructor placement-new new-operator

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

确定乘法的类型

我有以下问题.对于我的一个模板类,我也想采用其他两种类型的第一个应用的乘法运算符的类型.换句话说,如果我采用两个类实例并将它们相乘,那将是结果类型.

例如,给定T,S类型,我想要一些将决定Q类型的东西.

Q operator*(T& a, S& b);

如果操作员是类成员,它也应该工作.

class T{ Q operator*(S& a); };

有可能吗?

c++ templates

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

POSIX进程和文件描述符

我是C下的进程使用新手,我有一个与子进程中文件描述符的linux行为有关的问题.

我已经找到了在子进程和父进程之间共享文件描述符的信息,而且数字为0,1,2的文件描述符是标准输入输出和错误,所以我认为如果我分叉进程我会有相同的输入和输出目录,但是当我在子进程中更改它时,在父进程中不会更改它.我的问题是,它是否适用于每个文件描述符,所以如果我决定让我们说在子进程中覆盖文件描述符号100它将在子进程和父进程中不同,或者只有文件描述符0,1,2被认为是特殊的.

最好的祝福

c linux posix

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

切换取决于对象类型

我想知道是否有办法以更好的方式执行以下操作(更容易阅读,更简洁).

我有Foo的对象具有它具体的Foo实现类型让我们称它们为Foo1 .. FooN.

我还有foo描述的字符串表,例如Foo1"禁止Foo1".我想要做的是某种类型的检查取决于Foo的实际类型.目前我这样做:

std::string fooUtils::translate(Foo * foo){
   if(typeid(foo) == typeid(Foo1){
      return "bars the Foo1";
   }
   else if
     ...
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法.

我想到的第一个是存储std :: map <std :: typeinfo,std :: string> - 这是我渴望的解决方案,但我不知道将类型信息作为一个副作用地图的关键(有没有?).我还想知道是否有任何东西可以用较简单的方式比较类型,例如boost :: is_type <Foo1,foo>或类似的东西.

c++ c++11

0
推荐指数
1
解决办法
703
查看次数