小编Mel*_*lon的帖子

模板类中的Typedef不起作用

我有以下代码的问题:

template <typename U>
class lamePtr
{
public:
    typedef U* ptr;
};

template <typename U>
class smarterPointer
{
    public:
    void funFun()
    {
        typedef lamePtr<U> someType;
        someType::ptr query;
    }
};
Run Code Online (Sandbox Code Playgroud)

如你所见,我在lamePtr中有一个typedef.在smarterPointer类里面我有一个函数funFun().我想做的是制作另一个typedef someType.直到该行,一切正常,直到我们到someType :: ptr查询行.

我想要发生的是"查询"将成为lamePtr <U> :: ptr(一个简单的值,而不是typedef;).但是,我得到编译错误(使用gcc 4.4.3):

temp.cpp: In member function ‘void smarterPointer<U>::funFun()’:
temp.cpp:15: error: expected ‘;’ before ‘query’
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

c++ templates typedef class typename

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

消息"在GCC 4.4中传递具有灵活数组成员的结构的ABI"是否重要?

我想知道来自编译器的这个消息是否应该仔细考虑.

我们来看看以下代码:

struct s
{
  int a;
  int b[];
};

void fun(struct s c)
{
}

int main()
{
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给出了以下错误:

main.c:7:6: note: the ABI of passing struct with a flexible array member has changed in GCC 4.4
Run Code Online (Sandbox Code Playgroud)

我的问题是:在更大的项目中安全使用这种结构吗?这种结构可能带来的风险和影响是什么(除了编译器消息)?

c compiler-construction gcc

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

从定时器捕获异常

我正在尝试创建一个看门狗类,它将在指定时间后抛出异常:

from threading import Timer
from time import sleep

class watchdog():
  def _timeout(self):
    #raise self
    raise TypeError

  def __init__(self):
    self.t = Timer(1, self._timeout)

  def start(self):
    self.t.start()

try:
  w = watchdog()
  w.start()
  sleep(2)
except TypeError, e:
  print "Exception caught"
else:
  print "Of course I didn't catch the exception"
Run Code Online (Sandbox Code Playgroud)

该异常未被捕获,因为该异常是从完全不同的上下文引发的,因此我们将看到最后一条消息。

我的问题是,如何修改代码,以便捕获异常?

python exception timer watchdog

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

在同一赋值语句中将多个字符串文字转换为const char *

我是C ++的新手,我在下面的代码片段中遇到了这个代码片段,这对我来说似乎很奇怪。

const char* keys = "hello" "world";
std::cout << keys << std::endl;
Run Code Online (Sandbox Code Playgroud)

上面的代码在控制台中显示helloworld。在同一条语句中将两个字符串文字分配给const char *是否在语法上有效?如果是这样,它将如何存储在内存中?

c++ string

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

'ld'不能链接符号,尽管它们在库中

尝试使用"dmalloc"编译和链接我的程序时遇到问题.

bin
+--dmalloc

include
+--dmalloc.h

lib
+--libdmalloc.a
+--libdmallocth.a

main.c
Run Code Online (Sandbox Code Playgroud)

我有以下目录结构

现在我尝试使用以下命令编译我的程序:

gcc -Iinclude -Llib -ldmalloc -DDMALLOC main.c
/tmp/ccSDFmWj.o: In function `main':
main.c:(.text+0x29): undefined reference to `dmalloc_malloc'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

好吧,我知道链接符号有问题,ld根本找不到对dmalloc_malloc的引用.然而...

nm lib/libdmalloc.a | grep dmalloc_malloc
0000000000001170 T dmalloc_malloc
0000000000000fe0 t dmalloc_malloc.part.6
Run Code Online (Sandbox Code Playgroud)

我很困惑......那个图书馆里有符号.为什么'ld'有问题?

c linker compilation ld dmalloc

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

理解python正则表达式

我们假设我有以下字符串:

out = "someUndefinedGarbageVALUE: 12 34 23 00possiblySomeOtherGarbage"
Run Code Online (Sandbox Code Playgroud)

现在我要解析"12 34 23 00"值.在这种情况下,我执行以下操作:

regex = re.compile('VALUE: (\d\d\s?)*')
matches = regex.findall(out)
Run Code Online (Sandbox Code Playgroud)

但是在这种情况下,我只会得到:

00
Run Code Online (Sandbox Code Playgroud)

当我升级正则表达式时:

regex = re.compile('VALUE: ((\d\d\s?)*)')
Run Code Online (Sandbox Code Playgroud)

我会得到:

12 34 23 00, 00
Run Code Online (Sandbox Code Playgroud)

我的问题:

1)使用http://regexpal.com/我看到第一个表达式很好用.试试自己:

VALUE: (\d\d\s?)*
Run Code Online (Sandbox Code Playgroud)

反对

garbageVALUE: 05 03 04garbage
Run Code Online (Sandbox Code Playgroud)

使用Python它是不同的.我的推理在哪里错了?

2)为什么第二个表达式恰好捕获了两个组?它应该只捕获一个

12 34 23 00
Run Code Online (Sandbox Code Playgroud)

或所有可能的变化?

12, 12\s, 12\s34 ...
Run Code Online (Sandbox Code Playgroud)

我知道这是一个贪婪的搜索,但为什么两个群体被捕?

python regex

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

函数来获取存储的回调

假设我有一个存储回调的变量.

void* (*function)(int, double);
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个函数,它将返回此回调.我不希望用户直接访问回调,而是通过函数访问.这不起作用:

void* (*)(int, double) getCallback();
Run Code Online (Sandbox Code Playgroud)

我的问题是:这种功能的原型是什么样的?

c function callback

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