[英]Need advice on type constrain design in class template in C++, v11
我想在類模板A
類型參數T
上放置POD類型約束,然后從令人滿意的A
派生另一個類模板B
此外,根據A
實例的恆定性, B
應該具有不同的實現。 眾所周知,這樣做的目的是為了在運行時進行更好的類型檢查。
我能弄清楚的是A
的暫定定義
template <typename T, typename POD=void>
class A;
template <typename T>
class A <T, std::enable_if<std::is_pod<T>::value>::type>
{
//blah...
};
以便在傳遞非POD類型時無法實例化A,因為您可能已經注意到,部分參數化可以像類型切換一樣實現技巧。
但是我不知道如何定義B。 我想它看起來像下面
template <typename A?>
class B;
template <>
B<const A?> : public A?
{
//blah...
};
template <>
B<A?> : public A?
{
//blah...
};
有什么好主意嗎?
PS:就我個人而言,我傾向於高度批評。 但是,只需發布您認為無論如何可以完成的操作即可。
如果專業將完全不同,這是一個絕妙的主意。 您必須這樣做:
template <typename T>
class B;
template <typename T>
class B<const A<T>> : public A<T>
{
};
template <typename T>
class B<A<T>> : public A<T>
{
};
除了你自己寫的這幾乎與你寫的一樣?
符號。
您可以將此類實例化為:
B<A<int>> x; //it chooses the second specialization
B<const A<int>> y; //it chooses the first specialization
參見在線演示 。 請注意,你忘了typename
的位置:
typename std::enable_if<std::is_pod<T>::value>::type
我也解決了。
如果專業領域中的某些代碼將是相同的,那么您可以做一些技巧以共享共同的部分,但是由於我不知道您打算在專業領域中投入什么,所以我無法提出任何建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.