Запитання з тегом «templates»

Тег шаблонів використовується в декількох контекстах: загальне програмування (особливо C ++) та генерація даних / документів за допомогою двигунів шаблонів. Під час використання цього тегу для впровадження важких питань - позначте мову коду, на якій написано реалізацію.

2
Чому функція видалення_референції не працює на функції?
Натрапив на щось дивне, коли днями робив якусь метапрограмування шаблонів. Це в основному зводиться до цього твердження не (як я б очікував) ухваленням. static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>); Спочатку я думав, що роблю синтаксичну помилку, визначаючи посилання на функцію, але це твердження проходить, показуючи, що це не так. static_assert(std::is_same_v<void()&, void()&>); Я також спробував …
38 c++  templates  types  c++17 

4
Перевантаження функції за допомогою шаблонів
Я намагаюся визначити функцію за допомогою шаблонів, і я хочу, щоб ім'я типу було або int, або anEnum (конкретна перерахунок, яку я визначив). Я спробував наступне, але не зміг: template <int | anEnum T> // or <int T, anEnum T> or <int, anEnum T> bool isFunction(const T &aVariable){} Що я …

3
Як я можу створити спосіб декартового продукту списків типів у C ++?
Пояснення самостійно. В основному, скажіть, у мене такі типи списків: using type_list_1 = type_list<int, somestructA>; using type_list_2 = type_list<somestructB>; using type_list_3 = type_list<double, short>; Вони можуть бути різною кількістю списків типів. Як отримати підбірку декартового продукту? result = type_list< type_list<int, somestructB, double>, type_list<int, somestructB, short>, type_list<somestructA, somestructB, double>, type_list<somestructA, somestructB, …

4
Контейнер STL із специфічним типом як загальний аргумент
Чи я можу зробити функцію, яка приймає контейнер із певним типом (скажімо std::string) як параметр void foo(const std::container<std::string> &cont) { for(std::string val: cont) { std::cout << val << std::endl; } } і називати його для кожного типу контейнера stl як вхідного? як вище? std::set<std::string> strset; std::vector<std::string> strvec; std::list<std::string> strlist; foo(strset); …

1
'auto' як заповнення аргументу шаблону для параметра функції
C ++ 20 дозволяє використовувати autoдля типу параметра параметр. Чи дозволяє це також використовувати autoяк заповнювач аргументу шаблону (не схожий, але в дусі шаблону <a +> шаблону C ++ 17) ) для типу параметра функції? Отже, наступний код, попередньо C ++ 20: template<typename First, typename Second> void printPair(const std::pair<First, Second>& …
22 c++  templates  auto  c++20 

4
Як викликати правильний конструктор типу шаблону?
У наступному коді, як я можу змусити коментований рядок працювати так само, як і рядок прямо над ним? Я хотів би зробити це загальним кодом, який викликає відповідний конструктор шаблону Type. #include <string> #include <iostream> template <typename Type> struct Class { Type data; Class(Type data) : data(data) { } }; …


1
Тип автоматичного повернення шаблону та неоднозначності
У мене функція шаблону перевантажена: template<typename T1, typename T2> auto overMax(T1 a, T2 b) { std::cout << __FUNCSIG__ << std::endl; return b < a ? a : b; } template<typename RT, typename T1, typename T2> RT overMax(T1 a, T2 b) { std::cout << __FUNCSIG__ << std::endl; return b < a …

1
Чи правильно Кланг відхиляти код, у якому вкладений клас шаблону класу визначається лише за допомогою спеціалізації?
Дано такий шаблон класу: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; ми визначаємо Innerокремо для кожної спеціалізації Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; а потім fодин раз визначити функцію члена для всіх спеціалізацій Outer: auto Outer<T>::f(Inner) -> void { } але Кланг …

4
Чому std :: функція не бере участі у вирішенні перевантаження?
Я знаю, що наступний код не компілюється. void baz(int i) { } void baz() { } class Bar { std::function<void()> bazFn; public: Bar(std::function<void()> fun = baz) : bazFn(fun){} }; int main(int argc, char **argv) { Bar b; return 0; } Тому що std::function, як я читав у цьому іншому дописі, …

2
Неоднозначні шаблони перевантаження
У мене є наступний шаблонний код #include <vector> #include <array> #include <iostream> template<typename T1> void foo(std::vector<T1> bar) { std::cout << "GENERIC" << std::endl; } template<typename T1> void foo(std::vector<std::vector<T1>> bar) { std::cout << "SPECIFIC (vector)" << std::endl; } template<typename T1, int SIZE> void foo(std::vector<std::array<T1, SIZE>> bar) { std::cout << "SPECIFIC (array)" …
16 c++  templates 

3
Варіатичні шаблони: розгортайте аргументи в групах
У мене є функція, яка бере два аргументи: template <typename T1, typename T2> void foo(T1 arg1, T2 arg2) { std::cout << arg1 << " + " << arg2 << '\n'; } І варіант, який повинен пересилати свої аргументи парами: template <typename... Args> void bar(Args&&... args) { static_assert(sizeof...(Args) % 2 == …

2
Як передати посилання на аргумент типу шаблону
Чи є спосіб передати посилання як аргумент на аргумент типу імені шаблону? Я маю на увазі так, замість передачі int, наприклад, для передачі посилання на int. template <typename T> struct Foo { Foo(T arg) : ptr(arg) {} T ptr; }; int main() { int* a = new int(6); Foo<decltype(a)> foo1(a); …
15 c++  templates 

5
Як мати змінну const у циклі for для створення шаблонів класів?
Я маю подібний код template <size_t N> class A { template <size_t N> someFunctions() {}; }; Тепер я хочу створити екземпляри класу та викликати функції в ньому у циклі for для безлічі значень типу // in main() int main() { for (int i = 1; i <= 100; i++) { …

1
Clang не компілює код, але gcc та msvc зібрали його
Я не розумію, в чому проблема: ні в моєму коді, ні в компіляторі (менш можливо). Існує такий фрагмент коду: #include <iostream> #include <type_traits> #include <set> template<typename T, typename = void> struct TestA: std::false_type {}; template<typename T> struct TestA<T, std::void_t<typename T::reverse_iterator>> : std::true_type {}; template<typename T> struct TestA<T, std::void_t<typename T::dummy_iterator>> : …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.