【问题标题】:How to make multiple template class to have the same type如何使多个模板类具有相同的类型
【发布时间】:2014-11-28 17:33:51
【问题描述】:

有两个模板类A和B。如何强制将它们实例化为相同的类型不相互嵌套?例如如果我像下面这样定义两个类:

template <class T> 
class A {};

template <class T> 
class B {};

那么用户可能会做这样的事情A&lt;int&gt; a;B&lt;float&gt; b;

我想强制 A 和 B 具有完全相同的类型,但我确实希望它们相互嵌套。所以当有人使用这两个类时,A 和 B 必须具有相同的类型。有没有办法做到这一点?设计这样的课程有什么好的做法?

谢谢

【问题讨论】:

  • 你想要一个实例化为 A + B,而不是 A + B 和 A + B 吗?跨度>
  • 您需要提供一个实际用例。
  • @DieterLücking,我只希望 A 和 B 具有相同的类型,它们可以是 A 和 B 或 A 和 B 和 B,即 A 和 B 必须用相同的类型实例化。
  • @newbie:多对匹配呢?
  • @CaptainObvlious,实际用例可能是这样的:A 是文件的一行,B 是文件解析器。在 B 中,您可能有 A getRow(const int rowIndex) 并且您希望解析器和从文件中读取的行具有完全相同的类型。

标签: c++ class-template template-classes


【解决方案1】:

您不必将它们相互嵌套,但可以将它们嵌套在第三种类型中:

template<class T>
struct C {

    typedef A<T> A;
    typedef B<T> B;

};

客户端只需通过 C 访问:

C<T>::A a;
C<T>::B b;

【讨论】:

  • 此外,A 和 B 的构造函数可以是私有的,C 可以是两者的朋友,实际上包含两个成员 A 和 B。
  • 感谢@DieterLücking,但是这样做有什么好处呢?是不是让代码看起来更优雅?
  • @newbie 这将阻止 A 或 B 的用户直接访问它们并违反此约束。
【解决方案2】:

如果你打算在另一个类中使用一个类的变量,你可以这样做,

template <class T> 
class A {
//code 
};

template <class U> 
class B {
//code
A<U> a; 
//remaining code
};

【讨论】:

    猜你喜欢
    • 2019-09-11
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 2014-08-19
    • 2021-05-25
    • 2011-08-05
    • 2014-12-18
    • 2020-01-08
    相关资源
    最近更新 更多