QT는 신호/슬롯 메커니즘에서 서명 정규화 프로세스를 적용한다고 읽었습니다. MOC 생성기는 기본적으로 신호/슬롯에서 const 참조 한정자를 제거하고 값으로 전달합니다.정규화 된 서명으로 얻는 QT의 이점
나는 BIG_DATA라는 큰 데이터 구조를 자주 생성하는 클래스를 가지고 있으며, 다른 클래스는이 데이터 구조가 방출 될 때마다이를 포착해야한다.
struct BIG_DATA
{
// very big data
};
class DataGenerator
{
// some methods which generate BIG_DATA
signals:
void data_updated(const BIG_DATA &);
};
내가 뭘 :
connect(&data_generator_object, SIGNAL(data_updated(const BIG_DATA &)), this, SLOT(catch_new_data(const BIG_DATA &)));
무엇 QT를 수행합니다
connect(&data_generator_object, SIGNAL(data_updated(BIG_DATA)), this, SLOT(catch_new_data(BIG_DATA)));
그래서, 여기에 const를 참조 예선을 제거하는 이점은 무엇인가? data_updated 신호의 많은 클라이언트에게 전체 BIG_DATA를 복사하는 오버 헤드로 무엇을할까요?
QT가 포인터 서명을 제거하려고 시도하지 않는 경우 가장 좋은 방법은 생성 된 BIG_DATA 개체에 대한 포인터를 사용하는 것입니다.
'connect'는 함수 선언 또는 함수 호출 (또는 둘 중 일부를 수행하는 엉뚱한 매크로)입니까? 함수 호출처럼 보입니다. 함수 호출에 매개 변수 유형을 넣지 마십시오. '신호'는? –
SIGNAL() 및 SLOT()은 매개 변수를 char 배열로 변환하는 매크로입니다. connect()는 함수 호출입니다. –