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

Pointers to class templates with different template parameters

本文关键字:参数      更新时间:2023-10-16

我在面试中遇到了这个问题,但仍然不知道如何解决:

假设我们有一个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;

还有其他想法吗?

无预处理器指令:

/* <-- added line
int _tmain(int argc, _TCHAR* argv[])
{
L<A>* pA;
L<B>* pB;
pA = pB;
return 0;
}
*/ //<-- added line
int main()
{
}

对我来说很好。

简单的解决方法:专门化L<>,使L<B>继承自L<A>:

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

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;
};

EDIT—在上编译versiohttp://codepad.org/CT3FvmwQ