我在采访中得到了这个问题,但仍然不知道如何解决这个问题:
假设我们有一个C ++代码:
int main(int argc, char* argv[])
{
L<A>* pA = 0;
L<B>* pB = 0;
pA = pB;
}
我们应该添加什么以便实际编译?
换句话说,我们应该如何定义L
,A
和B
类?请不要使用预处理程序的指令。
我只知道如何解决它:
template<class T> struct L {};
struct A {};
typedef A B;
甚至更简单的前向声明:
struct A;
typedef A B;
template<class> struct L;
还有其他想法吗?
答案 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>
的子类。
这不是那么微不足道。也许A
和B
应该实现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;
};
上编辑versio