Sas*_*aka 5 c++ templates pointers
我在采访中得到了这个问题,但仍然不知道如何解决这个问题:
假设我们有一个C++代码:
int main(int argc, char* argv[])
{
L<A>* pA = 0;
L<B>* pB = 0;
pA = pB;
}
Run Code Online (Sandbox Code Playgroud)
我们应该添加什么以便实际编译?
换句话说,我们应该如何界定L,A以及B类?请不要使用预处理程序的指令.
我只知道如何解决它:
template<class T> struct L {};
struct A {};
typedef A B;
Run Code Online (Sandbox Code Playgroud)
甚至更简单的前向声明:
struct A;
typedef A B;
template<class> struct L;
Run Code Online (Sandbox Code Playgroud)
还有其他想法吗?
没有预处理器指令:
/* <-- added line
int _tmain(int argc, _TCHAR* argv[])
{
L<A>* pA;
L<B>* pB;
pA = pB;
return 0;
}
*/ //<-- added line
int main()
{
}
Run Code Online (Sandbox Code Playgroud)
对我来说很好.
简单的出路:专门L<>从而L<B>继承自L<A>:
template<>
struct L<B> : public L<A> {};
Run Code Online (Sandbox Code Playgroud)
本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;
};
Run Code Online (Sandbox Code Playgroud)
编辑 - 在http://codepad.org/CT3FvmwQ上编译versio
| 归档时间: |
|
| 查看次数: |
483 次 |
| 最近记录: |