小编ser*_*gej的帖子

派生类中的显式模板静态成员实例化

我正在尝试使用静态成员实现模板类.从模板类派生的类应该被实例化,而不需要编写额外的代码.

这是我天真的(而不是成功的)方法:

Singleton.h:

template <class T> class Singleton {
protected:
  Singleton();
  static T instance_;
}

// explicit instantiation of 'instance_' ???, 
// where 'instance_' is an instance of the derived class
template <class T> T Singleton<T>::instance_;
Run Code Online (Sandbox Code Playgroud)

ConcreteA.h:

class ConcreteA : public Singleton<ConcreteA> {
public:
  ConcreteA();
  void foo();
}
Run Code Online (Sandbox Code Playgroud)

main.c中:

int main() {
  // an instance of ConcreteA should have been created (no extra code)!!!
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法强制的实例ConcreteA由刚刚获得ConcreteASingleton,而无需编写额外的实例代码?

一个肮脏的解决方法instance_ConcreteA …

c++ inheritance singleton templates c++11

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

这段代码意味着什么

我找到了一个代码段.我不明白.似乎变量__rem根本没用.下面的行还没有做任何有用的工作:

(void)(((typeof((n)) *)0) == ((uint64_t *)0));   \
Run Code Online (Sandbox Code Playgroud)

整个代码段如下:

#define do_div(n,base)  do{             \
    uint32_t __base = (base);           \
    uint32_t __rem;                 \
    (void)(((typeof((n)) *)0) == ((uint64_t *)0));   \
    if (((n) >> 32) == 0) {         \
        __rem = (uint32_t)(n) % __base;     \
        (n) = (uint32_t)(n) / __base;       \
    } else                      \
        __rem = __div64_32(&(n), __base);   \
    __rem;                      \
 }while(0)
/* Wrapper for do_div(). Doesn't modify dividend and returns
 * the result, not reminder.
 */
static inline uint64_t lldiv(uint64_t dividend, uint32_t divisor)
{ …
Run Code Online (Sandbox Code Playgroud)

c linux-kernel

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

Git diff:仅显示与模式不匹配的更改

是否可以假设git diff以某种模式开头的行保持不变?

例如,请考虑以下情况:

git diff -U0
Run Code Online (Sandbox Code Playgroud)

输出:

diff --git a/file_a.txt b/file_a.txt
index 26ed843..4071ff8 100644
--- a/file_a.txt
+++ b/file_a.txt
@@ -24 +24 @@
- * unimportant foo
+ * unimportant bar
diff --git a/file_b.txt b/file_b.txt
index c6d051e..4b3cf22 100644
--- a/file_b.txt
+++ b/file_b.txt
@@ -24 +24 @@
- * unimportant foo
+ * unimportant bar
@@ -48,0 +49 @@
+   this is important
@@ -56,0 +58 @@
+   this is also important
Run Code Online (Sandbox Code Playgroud)

以星号(正则表达式模式"^[[:space:]]*\*.*")开头的行并不重要,我想仅从 的输出中过滤包含此类行中的更改的文件git diff。在上面的示例中,输出应file_b.txt …

regex git git-diff

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

g ++错误:实例化后的专门化(模板类为朋友)

考虑以下C++代码:

template <class T>
class Singleton {};

class ConcreteSingleton : public Singleton<ConcreteSingleton> {
    template <class T>
    friend class Singleton;
};

int main() {}
Run Code Online (Sandbox Code Playgroud)

Singleton应该是一个朋友ConcreteSingleton:

它适用于Microsoft的visual C++编译器.但是,我无法用g ++ 4.8.4编译它.错误是:

   error: specialization of ‘Singleton<ConcreteSingleton>’ after instantiation
       template <class T> friend class Singleton;
Run Code Online (Sandbox Code Playgroud)

有没有办法解决它?

c++ g++ friend c++11 g++4.8

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

模板重载(参考和非参考版本)

我有一个看似简单的问题,我不知道如何解决.

想象一下以下模板方法

template<typename T> void Add(T& var);
Run Code Online (Sandbox Code Playgroud)

专业化可以在容器中添加某些东西(排序).我可以传递POD或更复杂的类型strings,这就是为什么我传递T作为参考.

这个问题是,每当我想用另一个方法的结果调用Add(...)时,例如:

Add(MethodThatReturnsAnInt());
Run Code Online (Sandbox Code Playgroud)

这不起作用,需要一个临时变量来保存结果MethodThatReturnsAnInt().

有没有任何重载方式,Add以便我可以有一个引用传递和非引用传递版本?

template<typename T> void Add(T& var);
template<typename T> void Add(T var);
Run Code Online (Sandbox Code Playgroud)

std::enable_if在这种情况下,有什么用途?

c++ templates overloading

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

嵌套类 C++ 中的友谊

我试图理解嵌套类中的友谊概念,但我没有正确理解这个概念。我已经编写了一个示例程序来理解它,但该程序不起作用

#include<iostream>

using namespace std;


class outerClass
{
    private:
        int a;
    public:
        class innerClass;
        bool print(innerClass);
};

class innerClass
{
    friend class outerClass;
    private:
        int b;

    public:
        innerClass() =default;

};

bool outerClass::print(outerClass::innerClass obj)
{
    cout<<"Value of b in inner class is:"<<obj.b;
}

int main()
{
    outerClass in;
    outerClass::innerClass obj;
    obj.b=5;
    in.print(obj);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

try.cpp: In member function ‘bool outerClass::print(outerClass::innerClass)’:
try.cpp:26:6: error: ‘obj’ has incomplete type
try.cpp:11:15: error: forward declaration of ‘class outerClass::innerClass’
try.cpp: In function ‘int main()’:
try.cpp:34:28: error: aggregate …
Run Code Online (Sandbox Code Playgroud)

c++ friend

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

如何在 UML 活动图中对函数的不同返回值进行建模?

例如,请参阅以下代码。如何在 UML 活动图中对函数的不同返回值进行建模?

typedef enum {CLOSED, OPEN, UNKNOWN} sw_state_t;

sw_state_t read_input(int index)
{
    uint8_t sw_state;

    if (spi_read(&sw_state) == STATUS_OK) {
       if (sw_state & (1 << index))
           return CLOSED;
       else
           return OPEN;
    }

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

我想显示的是函数返回的值。我拥有的是一个带有一个输入 ActivityParameter 和一个输出 ActivityParameter 的 Activity 块。

更新

下图有道理吗?

在此输入图像描述

c uml activity-diagram

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

设备树覆盖:片段编号

考虑以下设备树覆盖示例。片段编号为 0、1、2。

数字重要吗?它们必须按升序排列吗?或者 0, 2, 1 也可以吗?哪里指定的?

/dts-v1/;
/plugin/;

/ {
    fragment@0 {
        target = <&foo>;
        __overlay__ {
            ...
        };
    };

    fragment@1 {
        target = <&bar>;
        __overlay__ {
            ...
        };
    };

    fragment@2 {
        target = <&baz>;
        __overlay__ {
            ...
        };
    };

};
Run Code Online (Sandbox Code Playgroud)

linux-device-driver linux-kernel embedded-linux device-tree

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

什么时候需要重建initrd(Linux初始ramdisk)?

背景:我正在为我的内核模块开发一个DKMS包.该DKMS手册页包含下面的句子:

REMAKE_INITRD =该指令指定在将模块安装到内核后是否应重新创建initrd.

问:什么时候需要重新制作initrd?在将内核安装到内核后,如何确定是否需要重新生成initrd?

linux linux-device-driver linux-kernel initrd dkms

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

退出前是否需要 endlocal ?

我在批处理脚本中有以下“功能”:

:myfunction
    setlocal
    set _variable=%*
    :: do something with %_variable%
    endlocal
    exit /B 0
Run Code Online (Sandbox Code Playgroud)

注意setlocal/endlocol对。

正在endlocal这里需要?或者它是多余的?是否exit隐式结束本地化?

额外问题:可以在不测试行为的情况下回答这个问题,例如通过引用官方消息来源吗?

windows cmd batch-file

4
推荐指数
2
解决办法
1561
查看次数