Ну, у вас есть три варианта:
a) В любом случае вы хотите иметь только один экземпляр SuperMatrix. Затем перейдите к маршруту статического члена-функции, как уже было предложено.
б) Вы хотите создать несколько экземпляров. Тогда у вас есть для возврата указателя вместо ссылок и создания объектов с помощью new (т.е. return new SuperMatrix(...)
.
c) В качестве альтернативы варианту b вы также можете вернуть просто объект, т.е.
SpecialData SpecialData::new_supermatrix()(){
return SuperMatrix(MATRIX_DEFAULT_MAGNITUDE,1000,1239,FLOAT32,etc...);
}
Однако, для этого требуется оператор (глубокого) копирования (по умолчанию его будет недостаточно, чем обычно), и это означает, что объект создается в стеке, затем копируется и эта копия возвращается. Хорошо, что это не приведет к утечке памяти, если вы на самом деле не получите результат в переменную. Плохо то, что если объект очень большой, это может занять очень много памяти и времени.
Независимо от того, что вы собираетесь с этим делать, эти решения являются взаимоисключающими, как технически, так и логически. ;)