如何将模板类形参强制转换为const形参
How to cast template class parameter to const parameter
是否有一种方法可以强制转换模板参数类型?
说:
#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());
相关文章:
- 包含void*结构的函数的Const正确性和形参
- const整型模板形参的条件
- 修改const形参引用
- 形参中const的位置差异
- Const模板形参在创建后不再保留Const性
- 为什么stable_sort函数中的ref形参需要const ?
- 大形参自动使用const-ref
- c++ const函数形参.有没有一种方法可以只声明函数的单个签名?
- 如何将const形参从一个成员函数传递到另一个成员函数
- 我想知道函数接受const形参和非const形参的区别
- const迭代器的模板形参,而不是迭代器
- 右值或左值(const)引用形参
- 在Bjarne的这个例子中,为什么可以将const限定对象传递给非const形参?
- 将所有引用形参设为const的理由是什么?
- const引用形参的默认值
- map带有const模板形参和const引用模板形参
- 将非const引用使用auto-keyword声明的lambda作为实参传递给std::函数形参类型
- NULL直接传递给需要const引用形参的函数(vc++ 4.2)
- 如何将模板类形参强制转换为const形参
- 为什么必须引用const来避免复制形参?