簡體   English   中英

在C ++,v11中的類模板中需要有關類型約束設計的建議

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM