Для получения информации о сигнатуре используется шаблонная структура Cntm::SignatureInfo. В качестве параметра шаблона указывается сигнатура функции или метода, например: SignatureInfo<double (int, const string&, void*)> или SignatureInfo<double (Class1::*)(int, const string&, void*)>.
Класс содержит статические константы: int argsCount - кол-во аргументов; bool isMethod - является ли сигнатура сигнатурой функции или сигнатурой метода.
Класс содержит следующие типы (заданные через typedef): FuncSign - сигнатура функции с заданными аргументами и возвращаемым значением (для метода и для функции); FuncInfo - информация и сигнатуре функции (для метода и для функции); ResType - тип результата метода или функции; ArgType0, ... ArgTypeN - типы аргументов метода или функции (со спецификаторами const, volatile, ссылочные типы, если аргумент - ссылка); ResultStoreType - typedef SignatureInfoResult < ResType > - специальный класс, инкапсулирующий результат метода (в т.ч. и void). Описание Cntm::SignatureInfoResult см. ниже; StoreType0, ... ArgTypeN - типы значений аргументов метода или функции (типы, очищенные от const, volatile и ссылок, они пригодны для хранения значений аргументов или указателей на значения аргументов); ClassType - тип класса (только для методов); Pointer - указатель на метод или функцию с указанной сигнатурой.
Класс содержит следующие вложенные структуры: template <typename classformethodt>=""> struct Method содержит тип Pointer, который является указателем на метод класса ClassForMethodT с текущей сигнатурой; struct Args { StoreType0 arg0; ... ArgTypeN argN; } - структура используется для хранения значений всех аргументов метода или функции.
Класс содержит следующие статические методы: Result MethodCall(ClassForMethodT* Object, typename Method<ClassForMethodT>::Pointer Method, Args* Args) - данный метод используется для вызова метода Method с текущей сигнатурой объекта Object типа ClassForMethodT. Значения аргументов, которые будут переданы методу представлены структурой Args. Метод возвращает значение не ResType (которое м.б. и void), а Result, т.е. всегда возвращает какоето значение, тип Result имеет оператор приведение к типу ResType (если этот тип не void).
Класс Cntm::SignatureResult (представленный в Cntm::SignatureInfo как Result) позволяет унифицировать работу с возвращаемыми значениями как типа void (ничего не возвращается) так и со всеми прочими типами. Для типов не void класс содержит конструктор копирования для типа возвращаемого значения метода или функции и оператор приведения к этому типу, для void ни конструктора, ни оператора нет. Класс содержит статический флаг noVoid, который содержит true для нормальных типов и false для void.
См. определение в файле SignatureInfo.h строка 57
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |