LINUX.ORG.RU

signal-slot signature

 


0

2

Тут в документации увидел:

Note: The following code will compile and run, but due to signature normalization, the code will be slower.

     //slower due to signature normalization at runtime

     connect(signalMapper, SIGNAL(mapped(const QString &)),
         this, SLOT(readFile(const QString &)));

Я всегда предпочитал полностью писать сигнатуры. Из-за чего код будет медленнее?

Добавлю ссылку сюда, может кто пояснит, поскольку ответов там нет, а только рассуждения http://qt-project.org/forums/viewthread/19142

★★★★★

Ну написано же

due to signature normalization

Вот из-за этого и будет.

grondek ()
Ответ на: комментарий от grondek

Я сейчас пишу в основном так как предлагает Qt при автоподставновке, то есть уже обрезанный вариант сигнатуры - меньше места и читать удобнее.

grondek ()
#!/bin/bash

function gen() {
mkdir $1
pushd $1

cat >$1.pro <<EOF
QT = core
TARGET = $1
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
HEADERS += test.h
EOF

cat >main.cpp <<EOF
#include <QCoreApplication>
#include "test.h"
int main() {
  Test t; t.connect(&t, SIGNAL(si($2)), &t, SLOT(sl($2)));
}
EOF

cat >test.h <<EOF
#include <QObject>
class Test: public QObject {
Q_OBJECT

signals:
  void si(const int &i);

public slots:
  void sl(const int &i) {}
};
EOF

qmake && make && objdump -D $1 > ../$1.s
popd
rm -rf $1
}

(
gen 1 "const int &"
gen 2 "int"
) >/dev/null 2>&1

diff 1.s 2.s

Результат:

2c2
< 1:     формат файла elf32-i386
---
> 2:     формат файла elf32-i386
48,53c48,56
<  8048197:	00 22                	add    %ah,(%edx)
<  8048199:	80 2e 3f             	subb   $0x3f,(%esi)
<  804819c:	36 00 1b             	add    %bl,%ss:(%ebx)
<  804819f:	86 05 24 a9 18 c4    	xchg   %al,0xc418a924
<  80481a5:	da 2d 8c 70 a0 c2    	fisubrl 0xc2a0708c
<  80481ab:	f3                   	repz
---
>  8048197:	00 1f                	add    %bl,(%edi)
>  8048199:	15 74 55 88 3d       	adc    $0x3d885574,%eax
>  804819e:	37                   	aaa    
>  804819f:	b4 ef                	mov    $0xef,%ah
>  80481a1:	a9 f9 df c7 c3       	test   $0xc3c7dff9,%eax
>  80481a6:	03 c8                	add    %eax,%ecx
>  80481a8:	2b                   	.byte 0x2b
>  80481a9:	b2 35                	mov    $0x35,%dl
>  80481ab:	7a                   	.byte 0x7a
1192c1195
<  8048bcf:	8d 83 99 e0 ff ff    	lea    -0x1f67(%ebx),%eax
---
>  8048bcf:	8d 83 91 e0 ff ff    	lea    -0x1f6f(%ebx),%eax
1666,1678c1669,1674
<  804908b:	28 63 6f             	sub    %ah,0x6f(%ebx)
<  804908e:	6e                   	outsb  %ds:(%esi),(%dx)
<  804908f:	73 74                	jae    8049105 <_ZL17qt_meta_data_Test+0x45>
<  8049091:	20 69 6e             	and    %ch,0x6e(%ecx)
<  8049094:	74 20                	je     80490b6 <_IO_stdin_used+0x32>
<  8049096:	26 29 00             	sub    %eax,%es:(%eax)
<  8049099:	32 73 69             	xor    0x69(%ebx),%dh
<  804909c:	28 63 6f             	sub    %ah,0x6f(%ebx)
<  804909f:	6e                   	outsb  %ds:(%esi),(%dx)
<  80490a0:	73 74                	jae    8049116 <_ZL17qt_meta_data_Test+0x56>
<  80490a2:	20 69 6e             	and    %ch,0x6e(%ecx)
<  80490a5:	74 20                	je     80490c7 <_ZL17qt_meta_data_Test+0x7>
<  80490a7:	26 29 00             	sub    %eax,%es:(%eax)
---
>  804908b:	28 69 6e             	sub    %ch,0x6e(%ecx)
>  804908e:	74 29                	je     80490b9 <_IO_stdin_used+0x35>
>  8049090:	00 32                	add    %dh,(%edx)
>  8049092:	73 69                	jae    80490fd <_ZL17qt_meta_data_Test+0x3d>
>  8049094:	28 69 6e             	sub    %ch,0x6e(%ecx)
>  8049097:	74 29                	je     80490c2 <_ZL17qt_meta_data_Test+0x2>

anonymous ()
Ответ на: комментарий от grondek

Я сейчас пишу в основном так как предлагает Qt при автоподставновке, то есть уже обрезанный вариант сигнатуры - меньше места и читать удобнее.

Почему бы не использовать «новый синтаксис»? Или речь о Qt4?

DarkEld3r ★★★★★ ()
Ответ на: комментарий от anonymous

Т.е. разница всего в паре сравнений, ну ок.

UVV ★★★★★ ()
Ответ на: комментарий от DarkEld3r

Да, речь о 4, на 5 ещё не переползли... Не думаю, что к этому релизу будем...

UVV ★★★★★ ()
Ответ на: комментарий от DarkEld3r

Да, о Qt4. Там где я работаю пока только планируется переход на Qt5 в следующем году.

grondek ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.