在我的代码中,我有数十个结构,如下所示:
def change
GolfRetailer.in_batches.update_all(duplicate_domain: false)
change_column_null :golf_retailers, :duplicate_domain
end
编写诸如以下的宏是否可以接受:
[HttpGet]
[Route("api/controller/getlastresult/{id}")]
public IActionResult GetLatestResultForController(string id)
{
Response.ContentType = "application/json";
var list = _dbAccessLayer.GetAllVoteResults();
var appropriateResults = list.Where(item => item.DeviceId.Equals(id) && item.Status == "Finished")
.OrderBy(item => item.TimeStarted);
if (appropriateResults.Any())
return Ok(Json(appropriateResults.Last().Result));
return BadRequest();
}
所以我可以拥有这样的结构?
struct foo {
private:
params _someParams;
public:
foo(const params& p) noexcept : _someParams(p) { }
void banana() { }
void apple() { }
};
struct bar {
private:
params _someParams;
public:
foo(const params& p) noexcept : _someParams(p) { }
void watermelon() { }
void orange() { }
void strawberry() { }
};
答案 0 :(得分:4)
在一般情况下,我不会回答。它是基于观点和/或过于广泛的。
在这种情况下,不会。
struct base {
params _someParams;
base( params const& p ) noexcept:
_someParams(p)
{}
};
struct foo:private base {
using base::base;
void banana() { }
void apple() { }
};
改用它。
继承ctor可让您重新发布私有基础ctor。私人基地可以很好地存储您的参数。
结果是可调试的,并且愚蠢的错字引起问题的可能性很小,因为每个结构的样板很简单,大约与您的宏解决方案一样短。
答案 1 :(得分:-1)
可以接受的是相对于您的团队而言的,但是我在代码很小且简单的情况下使用了它。不过请考虑一下缺点:您将无法像普通代码一样逐行调试代码。大多数调试器都不擅长单步执行宏。
在方案“ PARAMS_AND_CTOR”中,您将非常接近使用宏尝试创建新的语言。当您这样做时,人们现在不仅需要了解所有C ++,而且还需要了解您的自定义宏。这使得了解您的代码的学习曲线非常陡峭。
在极端情况下,我已经看到人们使用它使C看起来像Pascal。