gpt4 book ai didi

c++ - 最小化 C++ 中的重复代码,一个不那么简单的案例

转载 作者:行者123 更新时间:2023-11-30 02:06:36 25 4
gpt4 key购买 nike

我正在编写一段代码,将“人”对象从一个数据表示形式复制到另一个数据表示形式。每个类中的名字(name, address, title)匹配,所有类型都是字符串。对于每个字段,我想应用相同的转换,基于一些也取决于字段名称的条件。棘手的部分是重复代码使用基于字段名称的函数后缀。它看起来像这样:

LibraryA::Person person1;
LibraryB::Person person2;

if (person1.name_valid() && [...somestuff...]) {
string *v = SomeOtherFunction(person.name())
person2.set_name(v);
}
if (person1.address_valid() && [...somestuff...]) {
string *v = SomeOtherFunction(person.address())
person2.set_address(v);
}
if (person1.title_valid() && [...somestuff...]) {
string *v = SomeOtherFunction(person.title())
person2.set_title(v);
}

是否有技巧(或技术 :))将重复部分提取到模板中?我更喜欢涉及定义宏的解决方案(那太容易了:))

最佳答案

这符合您的要求,但我是否会使用它是另一个问题。仅当有大量重复时,我才会通过这条路径,然后将其与宏结合以简化调用代码:

void test_and_set( Person const & person1, Person & person2, 
bool (Person::*test)() const,
std::string (Person::*get)() const,
void (Person::*set)( std::string const &) )
{
if ( (person1.*test)() ) {
(person2.*set)( (person1.*get)() );
}
}

用作:

test_and_set( person1, person2, &Person::valid_name, &Person::get_name, &Person::set_name );

并结合本地宏:

#define TEST_AND_SET( p1, p2, field ) \
test_and_set( (p1), (p2), &Person::valid_##field, &Person::get_##field, &Person::set_##field )

TEST_AND_SET( person1, person2, name );
TEST_AND_SET( person1, person2, title );
#undef TEST_AND_SET

关于c++ - 最小化 C++ 中的重复代码,一个不那么简单的案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8674499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com