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

Explicit member specialization using IBM Rational Rhapsody

我想使用 IBM Rational Rhapsody 明确特化 class 中的一些成员函数。

到目前为止我做了什么; 我在常规 class 中创建了一个函数,将其标记为 模板 。将 CG::Generate 标记为 Specification。这将是模板的原型。

然后我创建了另一个函数。将其标记为模板。将我上面创建的函数指向模板参数下的 Primary Template。填充实施。这是 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 定义之外实现显式专业化,如下所示:

//## 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 实现此目的?

这不完全是答案,而是具有专门功能的解决方法。当然,它可以解决问题。

与其在 class 中定义函数,不如在包中定义它们。这样,实现将在 class 范围之外。 Class 成员函数仍然可以访问包内定义的函数。

我把详细的解释发到我的博客上了。如果有兴趣:http://kaskavalci.com/?p=323