假设我有几个带有C样式构造函数的对象:
struct MyStruct { int item1; int item2 };
MyStruct construct_struct(int a, int b, int c, ...);
我想在不完全重新布置代码复制和粘贴重复代码的情况下,简单地在结构下定义C ++样式构造函数:
MyStruct::MyStruct(int a, int b, int c, ...){
// in pseudo code
this = construct_struct(a,b,c,...);
}
如何用C ++完成?
答案 0 :(得分:5)
我希望在不完全重新布置代码复制和粘贴重复代码的情况下,简单地在结构下定义C ++样式构造函数
而不是复制代码,您应该将其移入C ++构造函数,然后重写C样式的构造函数以调用C ++:
MyStruct::MyStruct(int a, int b, int c, ...){
// the code from construct_struct(a,b,c,...) goes here
}
MyStruct construct_struct(int a, int b, int c, ...) {
return MyStruct(a, b, c, ...);
}
这解决了代码重复的问题,并保留了C构造函数。
答案 1 :(得分:1)
如果您不想做dasblinkenlight suggested(即使您应该这样做)。只要对象是可分配的,your own answer中的方法也将起作用。对于您的对象成为const
成员或由于其他原因而无法分配的情况,我出于完整性的考虑而提出。
您可以委派给复制/移动构造函数:
MyStruct construct_struct(int a, int b, int c, ...){
}
MyStruct::MyStruct(int a, int b, int c, ...) : MyStruct(construct_struct(a,b,c,...)) {}
答案 2 :(得分:0)
简单的答案是:
In [1]: import requests
In [2]: url = "http://www.mec.ac.in/mec/stats2018.php"
In [3]: requests.get(url, headers={'User-Agent': 'Python-urllib/2.6'})
Out[3]: <Response [403]>
In [4]: requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'})
Out[4]: <Response [200]>