有没有办法转换模板参数类型?
说:
#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?
答案 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());