指向具有不同模板参数的类模板
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;
}
我们应该添加什么才能真正编译?
换句话说,我们应该如何定义L
、A
和B
类?请不要使用预处理器的指令。
我只知道如何解决它:
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>
的子类。
这可不是小事。也许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;
};
EDIT—在上编译versiohttp://codepad.org/CT3FvmwQ
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 如何将enable-if与模板参数和参数包一起使用