C ++:在构造函数中通过return构造

时间:2018-11-06 14:35:27

标签: c++ oop

假设我有几个带有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 ++完成?

3 个答案:

答案 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]>