如何将模板类形参强制转换为const形参

How to cast template class parameter to const parameter

本文关键字:形参 const 转换      更新时间:2023-10-16

是否有一种方法可以强制转换模板参数类型?

说:

#include <list>
class A
{
   int c;
   public:
      A(int a): c(a) {}
};
std::list<const A*> gen()
{
   std::list<A*> list1;
   list1.push_back(new A(5));
   list1.push_back(new A(6));
   return (std::list<const A*>) list1; //Error. Is there a way to cast ?
}
int main()
{
   return 0;
}

一个reinterpret_cast似乎与gcc工作…但是,reiterpret_cast的工作方式是编译器定义的…(⇒平台相关)(我不想重新构建另一个列表)

我必须这样做,因为我在类中有一个容器,对象必须在类中修改而不是在外部,但它们必须仍然可以在外部访问。

那么,如果B继承了A,然后将std::list强制转换为std::list,应该使用什么呢?

std::list<A*>std::list<const A*>是不同的类型,您不能在它们之间进行转换。有几个选项,其中两个是:

从头开始使用正确的字体:

std::list<const A*> list1;
list1.push_back(new A(5));
list1.push_back(new A(6));
return list1;

返回一个正确类型的对象,由原来的list1构造而成:

std::list<A*> list1;
list1.push_back(new A(5));
list1.push_back(new A(6));
return std::list<const A*>(list1.begin(), list1.end());