1

我想使用 IBM Rational Rhapsody 在一个类中显式地专门化一些成员函数。

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

然后我创建了另一个函数。将其标记为模板。将我在上面创建的函数指向模板参数下的主模板。填充实施。这是 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 实现这一目标?

4

1 回答 1

1

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

不要在类中定义函数,而是在包中定义它们。这样,实现将超出类范围。类成员函数仍然可以访问包中定义的函数。

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

于 2015-06-03T19:31:42.290 回答