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?
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)