如何将模板类参数转换为const参数

hl0*_*37_ 0 c++ parameters templates casting

有没有办法转换模板参数类型?

说:

#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;
}
Run Code Online (Sandbox Code Playgroud)

reinterpret_cast似乎与gcc一起工作......但是reiterpret_cast的工作方式是编译器定义的...(⇒依赖于平台)(我不想重建另一个列表)

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

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

jua*_*nza 6

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;
Run Code Online (Sandbox Code Playgroud)

返回正确类型的对象,由原始对象构造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());
Run Code Online (Sandbox Code Playgroud)