Частичная специализация с использованием концепций

Он работал для меня в окнах таким образом:

  1. Я изменил имя python-файлов python.py и pythonw.exe на python3.py pythonw3.py
  2. Затем я просто запустил эту команду в приглашении: python3 -m pip install package
0
задан P.W 19 March 2019 в 07:28
поделиться

3 ответа

Шаблоны функций не могут быть частично специализированными (и никогда не могут быть). Концепции не меняют это правило.

Однако шаблоны функций могут быть перегружены (и всегда могут быть). И концепции делают делают это проще:

template <typename T>
void Bar() {
    std::cout << "Type T is not a hashtable" << std::endl;
}

template <Hashtable T>
void Bar() {
    std::cout << "Type T is a hashtable" << std::endl;
}

int main()
{
    Bar<Foo>();           // calls the first Bar
    Bar<std::string>();   // calls the second Bar
}

Мы говорим, что второй Bar является более ограниченным , чем первый Bar.

0
ответ дан Barry 19 March 2019 в 07:28
поделиться

Можно ли специализироваться, используя понятия?

Нет, невозможно частично специализировать понятия. Согласно онлайн-ссылке на Ограничения и понятия :

Явные экземпляры, явные специализации, или частичные специализации понятий не допускаются (значение оригинальное определение ограничения не может быть изменено).

А что касается шаблонов функций, они могут быть только перегружены, а не частично специализированы.

0
ответ дан P.W 19 March 2019 в 07:28
поделиться

Я заменил специализацию шаблона функции специализацией структур, и мой код работает нормально Посмотрите на следующий код.

// This file is a "Hello, world!" in C++ language by GCC for wandbox.
#include <iostream>
#include <string>

template<typename T>
concept Hashtable = requires(T a) {
    { std::hash<T>{}(a) } -> std::size_t;
};

struct Foo {};

template <typename T>
struct Boo {
    static constexpr char value[] = "Type T is not a hashtable";
};

template <Hashtable HashT>
struct Boo<HashT> {
    static constexpr char value[] = "Type T is a hashtable";
};

template <typename T>
void Bar() {
    std::cout << Boo<T>::value << std::endl;
}

int main()
{
    Bar<int>();
    Bar<Foo>();
}
0
ответ дан Mohit 19 March 2019 в 07:28
поделиться
Другие вопросы по тегам:

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