如果我有一个名为Wood的类,并且调用了一个模板类 Chopper,以及接受引用的方法 像这样的Chooper ......
KeepWarm::burnFuel( Chopper <Wood>& wood_chopper );
我怎样才能投射或转换Chooper,其中CedarWood来自Wood,以便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?
答案 0 :(得分:2)
不可能,因为Chopper<Wood>
实际上与Chopper<CedarWood>
无关。
您可以通过使burnfuel
函数成为模板函数来解决此问题:
template<typename T>
void burnfuel(Chopper<T>& chopper);
答案 1 :(得分:0)
您可以将burnFuel
转换为模板:
class KeepWarm
{
template<typename W>
void burnFuel( Chopper<W>& wood_chopper );
};
答案 2 :(得分:0)
也许你可以通过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
}
}
};