0
我想了解類型特徵的概念。從基類使用類型特徵
說,我有一些模板化的類層次像這樣和客戶端功能:
template<typename T>
class Base
{
public:
//...
virtual bool inline isSymmetric() const = 0;
};
template<typename T>
class ChildrenOperation : public Base<T>
{
public:
//...
virtual bool inline isSymmetric() const override
{
return true;
}
};
template<typename T>
void clientFunction(const Base<T>& operation)
{
//...
if(operation.isSymmetric())
{
// use operation in one way
} else {
// use operation in another way
}
}
顯然,clientFunction是多態和不同的孩子能有isSymmetric的不同實現。 但是,由於isSymmetric似乎是不變的,實際上更多的是類型信息,我已經讀過關於類型特徵,我想知道是否有可能重寫客戶端函數而不依賴於運行時的isSymmetric,而是編譯時間。
我試過添加這樣的特質。但我不確定如何專門化它,並在多態環境中使用它。
template <typename T>
struct is_symmetric {
static const bool value = false;
};
爲什麼不重載clientFunction? – Axalo
你不能真正在多態上下文中使用類型特徵,因爲它們對* static *類型的東西進行操作,而虛擬函數對* dynamic *類型進行操作。 – TartanLlama
這段代碼不會像這裏寫的那樣工作。 'Base'是一個模板,但當您將其作爲'clientFunction'中的參數提供時,您不提供模板參數。我想你並不是真的希望'Base'成爲一個模板,只有孩子,但我不確定你打算如何處理這段代碼。 – petersohn