C++模板类对象兼容

标签 c++

我有一个模板类

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/

相关文章:

c++ - 几何着色器计算的线在相机移动时消失

c++ - 尝试制作一个 while 循环,减去一个数字直到达到所需值,如果减法超过所需值,则显示并停止

c++ - 2D 图形加速

c++ - 关于ostream运算符的问题<<

带和不带指针声明符的 C++11 自动声明

c++ - openmp 程序卡在 block 的末尾

c++ - OpenGL 纹理不会映射 - 白色方 block ?

c++ - 如何为 STL 排序编写带有中间变量的比较器

c++ - 如何返回包含字符串/整数变量的字符串

c++ - "explicit qualification in declaration"错误信息是什么意思?