簡體   English   中英

基於非類型參數存在的類模板重載?

[英]Class template overload based on presense of non-type parameter?

我有一個這樣工作的模板化類:

template <typename T, std::size_t maxSize>
class Foo
{
    std::array<T, maxSize> arr; 
};

我想做一個重載,你可以選擇只傳遞 T 而不是得到一個向量作為底層容器:

template <typename T>
class Foo
{
    std::vector<T> arr; 
};

這樣做的正確方法是什么?

您可以使用參數包來確定大小,並專門處理 1 個參數或 0 個參數:

首先,提供一個編譯失敗的默認值

template <typename T>
struct always_false : std::false_type {};

template <typename T, std::size_t... Is>
class Foo {
    static_assert(always_false<T>::value, "too many sizes");
};

然后,部分專門用於一個或零個參數:

template <typename T, std::size_t maxSize>
class Foo<T, maxSize> {
public:
    std::array<T, maxSize> arr;
};

template <typename T>
class Foo<T>
{
public:
    std::vector<T> arr;  
};

演示: https : //godbolt.org/z/5bW9c7

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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