給定一個看起來像這樣的代碼片段,我該如何編寫一個函數來檢查給定對象是否實現了某個混合?我嘗試使用指針鑄造,但由於他們有相同的基礎每個resoult是非空的,但我猜測有一個模板化的解決方案,但找不到任何我可以實現。C++ Mixin,檢查模板類型是否實現了特定的混合
class Widget{
public:
int px;
int py;
};
template <typename Base>
class StaticText : public Base{
public:
std::string text;
};
template <typename Base>
class Alignable : public Base{
public:
std::string alignment;
};
template <typename Base>
class Colorable : public Base{
public:
std::string color;
};
typedef Alignable<StaticText<Widget>> Text;
int main(){
auto w = std::make_unique<Text>();
// if(w == Colorable...)
// if(w == Alignable...)
std::cin.get();
return 0;
}
嗯,不應該'if(dynamic_cast(ptr)!= nullptr){}'工作嗎? –
Vorac
@Vorac'Colorable'是一個帶有(大概未知)參數的模板類型。它必須是'if(dynamic_cast>(ptr)!= nullptr){}'但'T'可以是任何東西。 –
cdhowie
@cdhowie確實,我們說mixin,所以它可能是着色>。我的錯。 –
Vorac