使用IBM Rational Rhapsody的显式成员专门化

Explicit member specialization using IBM Rational Rhapsody

本文关键字:成员 专门化 IBM Rational Rhapsody 使用      更新时间:2023-10-16

我想使用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