sách gpt4 ăn đã đi

c++是否可以将对象类型传递给要与之比较的函数

In lại 作者:太空狗 更新时间:2023-10-29 23:32:32 26 4
mua khóa gpt4 giày nike

我遇到这样一种情况,我需要查明派生对象是否存储在另一个对象的 vector 中,并想对其进行功能化。我想不出一种方法来做我想做的事情,或者确定它是否可行。我有一个有效的解决方案,我将其包括在内,但如果有一种直接的方法来实现目标,它会更清晰。

这基本上就是我想做的:

class IFruit
{
công cộng:
virtual ~IFruit(){};
};
class Apple : public IFruit {};
class Banana : public IFruit {};
class Orange : public IFruit {};

class FruitBowl
{
công cộng:
bool HasFruit( datatype?? FruitType )
{
for ( auto iter : m_Fruit )
{
if ( typeof( iter ) == typeof( FruitType ) )
{
return ( true );
}
}
return ( false );
}

vector< IFruit* > m_Fruit;
};

int chính()
{
FruitBowl Snacks;
Snacks.m_Fruit.push_back( new Banana );
Snacks.m_Fruit.push_back( new Apple );
Snacks.m_Fruit.push_back( new Orange );

if ( Snacks.HasFruit( Orange ) )
{
cout << "There is an orange available";
}

return ( 0 );
}

这是实现目标的解决方法,但它有提供回调的额外步骤,我很想根除它:

#include 
#include
#include
sử dụng không gian tên std;

class IFruit
{
công cộng:
virtual ~IFruit(){};
};
class Apple : public IFruit {};
class Banana : public IFruit {};
class Orange : public IFruit {};

class FruitBowl
{
công cộng:
bool HasFruit( function< bool( IFruit* ) > fnCompareFruitType )
{
for ( auto iter : m_Fruit )
{
if ( fnCompareFruitType( iter ) )
{
return ( true );
}
}
return ( false );
}

vector< IFruit* > m_Fruit;
};

int chính()
{
FruitBowl Snacks;
Snacks.m_Fruit.push_back( new Banana );
Snacks.m_Fruit.push_back( new Apple );
Snacks.m_Fruit.push_back( new Orange );

if ( Snacks.HasFruit( []( IFruit* TestFruit ){ return ( dynamic_cast< Orange* >( TestFruit ) != nullptr ); } ) )
{
cout << "There is an orange available";
}

return ( 0 );
}

câu trả lời hay nhất

您不能将类型作为运行时函数参数传递,但可以将类型用作函数模板的编译时模板参数:

#include 
#include
#include

class IFruit
{
công cộng:
virtual ~IFruit(){};
};
class Apple : public IFruit {};
class Banana : public IFruit {};
class Orange : public IFruit {};

class FruitBowl
{
công cộng:
template
bool HasFruit()
{
return std::any_of(m_Fruit.begin(), m_Fruit.end(),
[](IFruit* fruit) {
return dynamic_cast(fruit) != nullptr;
});
}

std::vector< IFruit* > m_Fruit;
};


int chính()
{
FruitBowl Snacks;
Snacks.m_Fruit.push_back( new Banana );
Snacks.m_Fruit.push_back( new Apple );
Snacks.m_Fruit.push_back( new Orange );

if ( Snacks.HasFruit() )
{
std::cout << "There is an orange available";
}
}

关于c++是否可以将对象类型传递给要与之比较的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37475097/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress