如果我有一个名为Wood的类,一个名为Chopper的模板类,以及一个接受对Chooper的引用的方法,如下所示的…
KeepWarm::burnFuel( Chopper <Wood>& wood_chopper ); 如何转换或转换Chooper,其中CedarWood派生自木头,以便KeepWarm::burnFuel接受它?
重述…
class Wood
{
};
class CedarWood: public Wood
{
};
template class T;
class Chopper
{
Chopper( const T value );
};
class KeepWarm
{
void burnFuel( Chopper<Wood>& wood_chopper );
};
Chopper<CedarWood> some_wood;
//
KeepWarm::burnFuel( some_wood ); // the troublesome line, is this kind of thing possible?发布于 2015-01-23 21:20:39
不,这是不可能的,因为Chopper<Wood>实际上与Chopper<CedarWood>没有关系。
您可以通过将burnfuel函数设置为模板函数来解决此问题:
template<typename T>
void burnfuel(Chopper<T>& chopper);发布于 2015-01-23 21:20:14
您可以将burnFuel转换为模板:
class KeepWarm
{
template<typename W>
void burnFuel( Chopper<W>& wood_chopper );
};发布于 2015-01-23 21:32:22
也许您可以通过在std::is_base_of中使用模板方法来实现您所期望的功能
// code based on molbdnilo's example
template <typename W>
void burnFuel(Chopper<W>& wood_chopper) {
if (std::is_base_of<Wood, W>::value) {
// ok
}
}或者:
template <typename T>
class KeepWarm
{
template <typename W>
void burnFuel(Chopper<W>& wood_chopper) {
if (std::is_base_of<T, W>::value) {
// ok
}
}
};https://stackoverflow.com/questions/28110719
复制相似问题