簡體   English   中英

向類模板特化添加方法

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

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