指向具有不同模板参数的类模板的指针

时间:2012-09-20 15:17:35

标签: c++ templates pointers

我在采访中得到了这个问题,但仍然不知道如何解决这个问题:

假设我们有一个C ++代码:

int main(int argc, char* argv[])
{
    L<A>* pA = 0;
    L<B>* pB = 0;
    pA = pB;
}

我们应该添加什么以便实际编译?

换句话说,我们应该如何定义LAB类?请不要使用预处理程序的指令。

我只知道如何解决它:

template<class T> struct L {};
struct A {};
typedef A B;

甚至更简单的前向声明:

struct A;
typedef A B;
template<class> struct L;

还有其他想法吗?

3 个答案:

答案 0 :(得分:9)

没有预处理程序指令:

/* <-- added line

int _tmain(int argc, _TCHAR* argv[])
{
    L<A>* pA;
    L<B>* pB;
    pA = pB;

    return 0;
}

*/ //<-- added line

int main()
{
}

对我来说很好。

答案 1 :(得分:6)

轻松出路:专攻L<>,以便L<B>继承自L<A>

template<>
struct L<B> : public L<A> {};

答案 2 :(得分:5)

L<A>*应该从L<B>*分配,这意味着L<B>应该是L<B>的子类。

这不是那么微不足道。也许AB应该实现L模板可以使用的某些特征概念:

template<typename E> struct L : public L< typename E::base >
{
};

struct BASE {};
template<> struct L<BASE> {};

struct A : public BASE {
  typedef BASE base;
};

struct B : public A {
  typedef A  base;
};

编辑 - 在http://codepad.org/CT3FvmwQ

上编辑versio