我有一些模板类,我需要为主类实现一个专门的成员函数。例如,如果我们有一个模板类Parent和其他两个模板类Boy和Girl。我想为男孩和女孩实现一个专门的会员功能。女孩的成员函数还有一个论点。
男孩和女孩本身也是模板类,所以如何在这段代码中定义TT?
template< typename TT >
class Child
{
    TT age;
};
template< typename TT >
class Boy< TT > : public Child< TT > 
{ ... };
class Girl< TT > : public Child< TT >
{ ... };
template<typename T>
class Parent {
private:
    std::vector< T > children;
//public:
//  void ProcessChild() {
//  }
};
template<> void Parent < Boy< TT > >::ProcessChild( TT age ) { // ??
  // implementation for boys
}
template<> void Parent< Girl< TT > >::ProcessChild( TT age, std::string name ) { // ??
  // implementation for girls
}在这种情况下,T将是男孩或女孩,TT将是int或double。
我想要两个成员函数专门为ProcessChild,一个男孩和一个女孩。我似乎无法为我的代码找到适当的语法,也找不到任何其他示例,其中内部类也是一个模板类。其他示例包括对原语类型的专门化,如int或double。
我也在尝试这样的方法:
template<>
template< class U >
class Parent < Girl< U > >
{
public:
    template< class TT >
    void ProcessChild( TT age, std::string name )
    {
         //...
    }
};这里显示的所有代码都不是编译的。这是我遇到的错误之一:error: invalid use of incomplete type 'class Parent<Girl<U> >
额外:我的问题是扩展从这之前的职位。不过,我对这个例子做了相当多的修改。
发布于 2022-08-30 18:59:15
最后,我意识到我只能使用特定的参数对函数进行简单的重载,并使用函数声明中所需的类。值得注意的是,我在这里担心的是只正确地封装成员函数。例如,当父母在模板参数上有Boy时,不允许用户用两个参数调用ProcessChild。
这就是我所做的,它在假设时无法编译,而在假定时成功编译:
template< typename TT >
class Child
{
    TT age;
};
template< typename TT >
class Boy< TT > : public Child< TT > 
{ ... };
class Girl< TT > : public Child< TT >
{ ... };
template<typename T>
class Parent {
private:
    std::vector< T > children;
public:
template< TT > void Parent < Boy< TT > >::ProcessChild( TT age ) { 
    addChild( *( new Boy< TT >( age ) ) );
}
template<> void Parent< Girl< TT > >::ProcessChild( TT age, std::string name ) { 
  addChild( *( new Girl< TT >( age, name ) ) );
}
};在我的特定情况下,我实际上不必使用模板函数专门化。
https://stackoverflow.com/questions/73533521
复制相似问题