[英]Adding methods to class template specialization
我想實現 STL 中存在的行為:當我們查看向量容器時,已知它具有vector<bool>
專門化,它添加了方法flip()
。
是否可以在不復制整個類作為特化並在其主體中添加新方法的情況下實現此類擴展?
我想您可以編寫專業化,以便它從通用版本繼承。
例如:假設您有一個帶有類型和值(具有默認值)模板參數的struct foo
; 假設它有一些方法( bar()
,在下面的例子中)
template <typename, bool = true>
struct foo
{ void bar () {}; };
並假設您想要使用相同的方法和額外的baz()
對bool
(作為模板類型)進行專業化; 你可以從普通版本繼承foo<bool>
如下
template <>
struct foo<bool> : public foo<bool, false>
{ void baz () {}; };
你可以驗證
foo<int> fi;
fi.bar(); // compile
//fi.baz(); // compilation error
foo<bool> fb;
fb.bar(); // compile
fb.baz(); // compile
你可以SFINAE“專業化”的方法
template <typename T>
class C
{
public:
// Common code...
template <typename U = T, std::enable_if_t<std::is_same<bool, U>::value, bool> = false>
void only_for_bool() {/*..*/}
};
C++20 將允許更好的語法:
template <typename T>
class C
{
public:
// Common code...
void only_for_bool() requires (std::is_same<bool, T>::value) {/*..*/}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.