Я хочу явно специализировать некоторые функции-члены внутри класса, используя IBM Rational Rhapsody.
Что я сделал до сих пор;
Я создал функцию внутри обычного класса, пометил его как шаблон. отмеченный CG :: Генерация в Спецификация. Это будет прототип шаблона.
Затем я создал другую функцию. Помечено как шаблон. Пометил функцию, которую я создал выше, как Основной шаблон под параметрами шаблона. Заполненная реализация. Вот код, который генерирует Rhapsody:
//## class MyConvert
class MyConvert {
//// Constructors and destructors ////
public :
MyConvert();
~MyConvert();
//// Operations ////
//## operation strtox(char*,char*)
template <typename T> inline static T strtox(char* in, char** end);
//## operation strtox(char*,char**)
template <> inline double strtox<double>(char* in, char** end) {
//#[ operation strtox(char*,char**)
return strtod(in, end);
//#]
}
};
Когда я собираю это, я получаю это: error: explicit specialization in non-namespace scope 'class MyConvert'
Явная специализация должна быть реализована вне определения класса, например так:
//## class MyConvert
class MyConvert {
//// Constructors and destructors ////
public :
MyConvert();
~MyConvert();
//// Operations ////
//## operation strtox(char*,char*)
template <typename T> inline static T strtox(char* in, char** end);
};
//## operation strtox(char*,char**)
template <> inline double MyConvert::strtox<double>(char* in, char** end) {
//#[ operation strtox(char*,char**)
return strtod(in, end);
//#]
}
Как этого добиться с помощью Rhapsody?
Это не совсем ответ, а обходной путь, чтобы иметь специализированные функции. Конечно, это делает свое дело.
Вместо определения функций внутри класса, определите их внутри пакета. Таким образом, реализация будет выходить за рамки класса. Функции-члены класса могут по-прежнему получать доступ к функциям, определенным в пакете.
Я разместил подробное объяснение в своем блоге. Если интересует: http://kaskavalci.com/?p=323