Как разделить статический / шаблонный класс между header и cpp? - PullRequest
2 голосов
/ 03 июля 2019

Это статическая / шаблонная функция, которую я имею:

template<class T>
static T *createWidget(Vec pos, Module *module, ModuleWidget *moduleWidget, int paramId, float minValue, float maxValue, float defaultValue) {
    T *widget = ParamWidget::create<T>(pos, module, paramId, minValue, maxValue, defaultValue);

    moduleWidget->mRandomModeWidgets[paramId] = widget;

    widget->Module = module;
    widget->ModuleWidget = moduleWidget;

    return widget;
}

Но я бы хотел разместить объявление на .h, а определение на .cpp.

Пробовал:

template<class T>
static T *createWidget(Vec pos, Module *module, ModuleWidget *moduleWidget, int paramId, float minValue, float maxValue, float defaultValue);

А чем:

template<class T>
static T *MyClasss:createWidget(Vec pos, Module *module, ModuleWidget *moduleWidget, int paramId, float minValue, float maxValue, float defaultValue) {
    T *widget = ParamWidget::create<T>(pos, module, paramId, minValue, maxValue, defaultValue);

    moduleWidget->mRandomModeWidgets[paramId] = widget;

    widget->Module = module;
    widget->ModuleWidget = moduleWidget;

    return widget;
}

Но там написано здесь не может быть указан класс хранения .

Где я не прав?

1 Ответ

2 голосов
/ 03 июля 2019

Но там сказано, что класс хранения здесь не указан.

Где я не прав?

Статическая функция-член (шаблон или нет) может быть объявлена ​​статической только в определении класса. Вы пытаетесь объявить функцию статической вне определения класса. Ключевое слово static имеет другое значение вне определения класса. Просто удалите его:

template<class T>
T *MyClasss::createWidget(params...) {
^          ^^ alśo note that there must be two colons in the scope resolution operator
 \ no static

Также помните, что экземпляры шаблона, которые используются в любой единице перевода, должны создаваться в той единице перевода, в которой определен этот шаблон. Этого можно достичь с помощью явного создания экземпляра в этом отдельном файле cpp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...