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

时间:2014-06-06 14:45:04

标签: c++ templates parameters 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;
}

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

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

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

1 个答案:

答案 0 :(得分: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;

返回正确类型的对象,该对象由原始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());