我想使用IBM Rational Rhapsody在类中明确地专门化一些成员函数。
到目前为止我做了什么; 我在常规类中创建了一个函数,将其标记为模板。将 CG :: Generate 标记为规范。这将是模板的原型。
然后我创建了另一个函数。将其标记为模板。将我在上面创建的功能指向模板参数下的主模板。填写实施。以下是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实现这一目标?
答案 0 :(得分:1)
这不是答案,而是具有专门功能的解决方法。当然,它可以解决问题。
不是在类中定义函数,而是在包内定义它们。这样,实现将超出类范围。类成员函数仍然可以访问包中定义的函数。
我在我的博客上发布了详细的说明。如果有兴趣:http://kaskavalci.com/?p=323