Вопросы с тегом «template-meta-programming»

27
Шаблонная проверка на существование функции-члена класса?
Можно ли написать шаблон, который меняет поведение в зависимости от того, определена ли определенная функция-член в классе? Вот простой пример того, что я хотел бы написать: template<class T> std::string optionalToString(T* obj) { if (FUNCTION_EXISTS(T->toString)) return obj->toString(); else return "toString not defined"; } Таким образом, если class Tуже toString()определен, то он …

20
Как вы можете перебирать элементы std :: tuple?
Как я могу перебирать кортеж (используя C ++ 11)? Я пробовал следующее: for(int i=0; i<std::tuple_size<T...>::value; ++i) std::get<i>(my_tuple).do_sth(); но это не работает: Ошибка 1: извините, не реализовано: невозможно развернуть "Listener ..." в список аргументов фиксированной длины. Ошибка 2: я не могу появиться в постоянном выражении. Итак, как мне правильно перебирать элементы …

15
Шаблоны C ++ по Тьюрингу?
Мне сказали, что система шаблонов в C ++ является полной по Тьюрингу во время компиляции. Об этом упоминается в этом посте, а также в Википедии. . Можете ли вы привести нетривиальный пример вычисления, использующего это свойство? Полезен ли этот факт на практике?

3
Как я могу получить глубину многомерного std :: vector во время компиляции?
У меня есть функция, которая принимает многомерный std::vectorи требует, чтобы глубина (или количество измерений) передавалась как параметр шаблона. Вместо жесткого кодирования этого значения я хотел бы написать constexprфункцию, которая будет принимать std::vectorи возвращать глубину как unsigned integerзначение. Например: std::vector<std::vector<std::vector<int>>> v = { { { 0, 1}, { 2, 3 } …

4
Шаблон метапрограммирования
Может кто-нибудь объяснить мне, почему первый способ метапрограммирования шаблона идет в бесконечный цикл, а второй работает правильно. #include <iostream> using namespace std; template<int N, int M> struct commondivs { static const int val = (N<M) ? commondivs<N,(M-N)>::val : commondivs<(N-M),M>::val; }; template<int N> struct commondivs<N,N> { static const int val = …

2
Передача концепции в функцию
Поскольку понятия определены как предикаты времени компиляции, возможно ли также фактически использовать эти предикаты для алгоритмов времени компиляции? Например, можно ли проверить, все ли типы в кортеже соответствуют концепции? Насколько я видел, невозможно передать концепцию какой-либо функции, что побуждает меня вернуться к использованию шаблонов для этих случаев. #include <type_traits> template<typename …

1
Законно ли инициализировать массив в конструкторе constexpr?
Является ли следующий код законным? template <int N> class foo { public: constexpr foo() { for (int i = 0; i < N; ++i) { v_[i] = i; } } private: int v_[N]; }; constexpr foo<5> bar; Clang принимает это, но GCC и MSVC отклоняют это. Ошибка GCC: main.cpp:15:18: error: …
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.