我有一个模板类
template<int N>
class xyz{
some code ....
};
如果我不在类内部使用 N,那么无论模板值如何,该类的所有对象都应该是兼容的。但事实并非如此。
例如,如果我说 xyz<20> a
然后 xyz<30> b(a)
,编译器报错。
为什么会这样?
最佳答案
因为它们是不同的类型。即使对于这个空类模板
template <int N> struct Foo {};
Foo<1>
是与 Foo<2>
不同的类型.当使用模板参数实例化此类模板时,它会创建一个不同的类,而不管类的代码中是否使用了模板参数。类模板是根据一些(模板)参数构建类的配方(模板)。
现在,如果你想构建一个 Foo
从另一个实例化,然后你可以添加一个隐式转换构造函数:
template <int N>
struct Foo
{
template <int M> Foo(const Foo<M>& rhs) {}
};
然后你可以在一个和另一个之间隐式转换:
Foo<42> a;
Foo<1> b (a);
Foo<99> c;
c = b;
关于C++模板类对象兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13703112/