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