gpt4 book ai didi

C++ 为给定列表中的每种类型执行一个操作

转载 作者:搜寻专家 更新时间:2023-10-31 01:32:54 24 4
gpt4 key购买 nike

我负责重构旧代码,偶然发现了这个案例:

void myClass::doStuff()
{
for( myIterator< Type1 > it( this->getDatabase() ); it; ++it )
{
do1( *it );
do2( *it );
do3( *it );
}
for( myIterator< Type2 > it( this->getDatabase() ); it; ++it )
{
do1( *it );
do2( *it );
do3( *it );
}
for( myIterator< Type3 > it( this->getDatabase() ); it; ++it )
{
do1( *it );
do2( *it );
do3( *it );
}
}

这显然很糟糕,因为我基本上复制了相同的代码 3 次,所以我决定使用这样的模板重构它:

template<class _type> void myClass::do123()
{
for( myIterator< _type > it( this->getDatabase() ); it; ++it )
{
do1( *it );
do2( *it );
do3( *it );
}
}
void myClass::doStuffBetter()
{
do123<Type1>();
do123<Type2>();
do123<Type3>();
}

是否有其他更简单/更高效的方法来分解代码中的这种重复?

额外的问题:如果我的类型不是静态的,而是在可变参数模板中给出的,我将如何进行类似的处理?

最佳答案

我发现您的解决方案足够好。

只是为了好玩,我提出以下 doStuffBetter()

template <typename ... Types>
void myClass::doStuffBetter()
{
int unused[] { (do123<Types>(), 0)... };

(void)unused; // to avoid a warning
}

应该与 C++11 一起工作,我想它也可以回答你的奖金问题。

关于C++ 为给定列表中的每种类型执行一个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42255534/

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