簡體   English   中英

根據 C++11 中的類型要求,專業化 class 模板成員 function

[英]Specializing class template member function based on type requirement in C++11

給定一個 class 模板:

template<typename T>
class AAA
    {
    void XXX(T val) { /* code */ }
    void YYY(T val) { /* code */ }
    };

我知道我可以將成員 function XXX 專門用於特定類型,例如“int”:

template<> void AAA<int>::XXX(int val) { /* code * }

但我真正想做的是專門化 XXX function 不是基於 T 的特定類型,而是基於 T 的特定類型要求,例如 T 應該是 copy_constructible,例如。 我知道 std::enable_if 是如何工作的,但無法想出正確的 C++ 語法來做我想做的事。 請注意,我知道一種技術,可以讓我部分專門化 class 模板本身,以便 T 可復制構造,但我不想這樣做。

您不能部分特化 function,但可以部分特化整個 class:

template<typename T, typename /* placeholder so there is a place for SFINAE */ = void>
class AAA
{
    void XXX(T val) { /* code */ }
    void YYY(T val) { /* code */ }
};

template<typename T>
class AAA<T, std::enable_if_t<std::is_copy_constructible_v<T>>>
{
    void XXX(T val) { /* code when T is copy constructible */ }
    void YYY(T val) { /* code when T is copy constructible */ }
};

暫無
暫無

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

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