Шаблонная специализация C++ для обеспечения дополнительной функции членства?

Я полагаю, что можно циклично выполниться через свойства использования объекта для/в, таким образом, Вы могли сделать что-то вроде этого:

function getKeys(h) {
  Array keys = new Array();
  for (var key in h)
    keys.push(key);
  return keys;
}
9
задан Chikei 9 November 2009 в 03:53
поделиться

2 ответа

Это потому, что это не функция вашего шаблона, поэтому не используйте "template <>". У меня это работает после удаления «шаблона <>», как показано ниже:

void sets<bool>::insert(const int& key) 
{ 
    insert(key, true); 
} 

Моя система FC9 x86_64.

Весь код:

template<typename T>
class sets
{
public:
    void insert(const int& key, const T& val);
};

template<>
class sets<bool>
{
public:
    void insert(const int& key, const bool& val) {}
    void insert(const int& key);
};

void sets<bool>::insert(const int& key)
{
    insert(key, true);
}

int main(int argc, char **argv)
{
        sets<bool> ip_sets;
        int key = 10;
        ip_sets.insert(key);
        return 0;
}
5
ответ дан 4 December 2019 в 13:03
поделиться

Помимо того, что сказал Эффо, если вы хотите добавить дополнительные функции в специализации, вы должны переместить общие функции в базовый класс шаблона. Например:

template<typename T>
class Base
{
public:
    void insert(const int& key, const T& val) 
    { map_.insert(std::make_pair(key, val)); }
private:
    std::map<int, T> map_;
};

template<typename T>
class Wrapper : public Base<T> {};

template<>
class Wrapper<bool> : public Base<bool>
{
public:
    using Base<bool>::insert;
    void insert(const int& key);
};

void Wrapper<bool>::insert(const int& key)
{ insert(key, true); }
11
ответ дан 4 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: