Decltype – вопросы и ответы

102
голоса
3
ответа
Я пытаюсь использовать ключевое слово decltype для автоматической функции: struct Thing { static auto foo() { return 12; } using type_t = decltype(foo()); }; И я получаю следующую ошибку (gcc 7.4):...
1 год, 11 месяцев назад DarthRubik
60
голосов
1
ответ
Мой код имеет несколько экземпляров, в которых функции реагируют только несколько иначе, когда сталкиваются с T && или const T &, однако сами функции довольно длинные (обратите внимание...
7 лет назад Suedocode
108
голосов
1
ответ
Рассмотрим следующий код: int a = 1; const int& b = a; std::cout << std::is_same<const decltype(b)&, const int&>(); Он компилируется на clang 3.5, а GCC 4.9 дает следующую о...
4 года, 10 месяцев назад Lingxi
62
голоса
1
ответ
Я читаю Скотта Майерса "Эффективный современный" C++, и я пытаюсь использовать мою машину в качестве примера, который он предоставляет для главы Deducing Types. Он выполняет эту функцию: template &...
4 года, 5 месяцев назад Astinog
61
голос
0
ответов
static decltype(auto) Get(XML_Serializer& arcSer) { return TDataConverter<TDataConverterAttribute>::Get(arcSer, DT_TypeDescriptor::Instance().GetAttribute<TVal, DT_DataConverterAttribu...
1 год, 1 месяц назад Pawan Kumar
71
голос
1
ответ
У меня есть функция, которая выглядит примерно так: template<class C> auto f(C const& c) -> decltype(begin(c)){ using std::begin; return begin(c); } Тело функции использует " using и и...
1 год, 9 месяцев назад alfC
69
голосов
1
ответ
Я пытаюсь написать общую функцию, которая вернет размер любого контейнера, который имеет метод size() и определение size_type . До сих пор я пробовал два подхода и не компилировал: 1. template <...
2 года, 4 месяца назад aquila
84
голоса
2
ответа
// g++ 7.3 template<typename T> struct td; int main() { int a = 1; td<decltype((const int)a)> t1; td<decltype((const int)1)> t2; return 0; } Ниже представлен результат компиляции:...
1 год, 9 месяцев назад olist
92
голоса
1
ответ
У меня есть длинное объявление функции шаблона: template <typename T> void foo(lots ofargs, goin here, andeven more, ofthese arguments, they just, dont stop); без перегрузок. и я хочу явно со...
3 года, 10 месяцев назад einpoklum
49
голосов
1
ответ
#include "stdafx.h" #include <iostream> #include <vector> #include <map> template <typename T> auto Copy(T c) { std::vector<decltype(c.begin()->first)> lc; //Copyin...
3 года, 4 месяца назад gaurav bharadwaj
109
голосов
2
ответа
Рассмотрим пример: #include <type_traits> template <class... Ts> decltype (auto) foo(Ts... ts) { return (ts->x + ...); } struct X { int x; }; int main() { X x1{1}; static_assert(std:...
2 года, 3 месяца назад W.F.
50
голосов
4
ответа
Эта строка слишком длинная: btnNickname = TWeakObjectPtr<UButton>(Cast<UButton>(WidgetTree->FindWidget(FName(STRINGIFY(btnNickname)))); Для переменной, определенной как: TWeakObjectP...
4 года, 4 месяца назад Broly
140
голосов
2
ответа
T *t; //T is an implementation detail t = new T; //want to avoid naming T to allow for flexibility t = new decltype(*t); //error: cannot use 'new' to allocate a reference t = new std::remove_refere...
5 лет, 6 месяцев назад nwp
133
голоса
5
ответов
(Запрос .) Учитывая N3290, §7.1.6.2p4, где элементы списка пронумерованы, но пронумерованы здесь для нашего удобства: Тип, обозначенный как decltype (e), определяется следующим образом: Если e - эт...
8 лет, 9 месяцев назад Fred Nurk
128
голосов
1
ответ
У меня есть немного кода, который не работает под VS2015, но работает под GCC. Я уверен, что ошибка связана с Visual Studio, но я хочу быть уверенным, что мое понимание decltype (auto) верное. #inc...
5 лет назад qeadz
86
голосов
1
ответ
int main() { const int a = 1; const int b = 2; typedef decltype(a*b) multiply_type; cout << typeid(multiply_type).name() << endl; return 0; } Возвращаемое значение программы заключается...
3 года, 5 месяцев назад KodeWarrior
61
голос
1
ответ
У меня есть вопрос, есть ли способ реализовать функцию ключевого слова decltype pre С++ 11. У меня есть упрощенный класс векторов template <class T> struct MyVector { typedef T ElementType; T...
2 года, 8 месяцев назад Marcin K.
105
голосов
1
ответ
Следующий код был скомпилирован с VС++ Nov 2012 CTP. Но компилятор дал предупреждение. Я просто задаюсь вопросом, является ли это ошибкой VС++ Nov 2012 CTP. struct A { int n; A(int n) : n(n) {} int...
6 лет, 11 месяцев назад xmllmx
60
голосов
1
ответ
У меня есть следующий код: struct A { const string name; A(string name) :name(name) {} }; struct Parent { public: const decltype(make_tuple(A("AA"))) children{ make_tuple(A("AA")) }; Parent() { } }...
4 года, 8 месяцев назад Hans vesselgård
91
голос
1
ответ
Я пытаюсь сделать threadpool, который принимает любую функцию, и возвращает будущее для любого возвращаемого значения/исключений, которые могут иметь функции. Я делаю это в основном как упражнение,...
1 год, 7 месяцев назад Claytorpedo
83
голоса
3
ответа
Я хочу получить тип функции и создать std::vector . Например, у меня есть int foo(int a[], int n) { return 1; } int bar(int a[], int n) { return 2; } и такой вектор таких функций будет: std::vector...
4 года, 4 месяца назад Q. Wang
100
голосов
0
ответов
Рассмотрим следующий код: auto f() -> decltype(int{0.}, void()) { } int main() { f(); } Он не скомпилирует (как ожидалось) ошибку: сужение преобразования '0.0' от 'double' до 'int' внутри {} Оба...
3 года, 3 месяца назад skypjack
85
голосов
0
ответов
У меня есть несколько макросов в моем коде, которые получают в качестве одного из аргументов имя окружающего класса. Например: struct Foo { MAKE_NON_COPYABLE(Foo); // ... }; (MAKE_NON_COPYABLE в ос...
6 лет назад alexyav
98
голосов
1
ответ
Посмотрите на код: #include <iostream> #include <utility> class test { private: test() { } public: test foo() { return *this; } static const char *name() { return "test"; } }; int main(...
5 лет, 5 месяцев назад ikh
131
голос
5
ответов
A (несколько) устаревшая статья описывает способы использования decltype вместе с SFINAE для определения того, поддерживает ли тип определенные операторы, такие как == или < . Здесь примерный ко...
8 лет, 9 месяцев назад Channel72
69
голосов
3
ответа
edit Возможно, это невозможно сделать, см. Очистить реализацию шаблона функции, указав указатель на функцию , хотя в ответе 1 есть макрос C-макрос
4 года, 3 месяца назад Sam Liddicott
121
голос
1
ответ
Если я правильно понял этот ответ и ссылался на стандартный раздел [dcl.type.auto.educt -5] , код: dec
2 года, 7 месяцев назад W.F.
88
голосов
0
ответов
Код template <typename T> struct Foo { int x_; int x() const; }; int a; template <typename T> decltype(a) Foo<T>::x() const { return x_; } int main() { } выдает следующую ошибку в...
4 года, 6 месяцев назад LogicStuff
-5
голосов
2
ответа
function<bool(const pair<int, int>&, const pair<int, int>&)> cmp = [](const pair<int, int> & left, const pair<int, int> & right){if(left > right) re...
3 года, 5 месяцев назад Yves
-6
голосов
1
ответ
Я знаю, что если я применяю decltype к p , где p - int* , decltype(*p) - int& . И decltype(&p) - int** . Ссылка, являющаяся rvalue, всегда получаю указатель при применении decltype к rvalue?
2 года, 1 месяц назад Jake Wright
61
голос
1
ответ
У меня возникли проблемы с использованием std :: result_of, decltype и std :: function с вариативными шаблонами. У меня есть следующая функция функции - int foo(int a, int b, int c) { std::cout <...
5 лет, 9 месяцев назад Danny Shemesh
84
голоса
3
ответа
Есть ли способ сравнить результат decltype в С++ 11? Другими словами, почему этот код недействителен: template<typename T, typename U> void func(T& t, U& u) { if(decltype(t) == declty...
7 лет, 6 месяцев назад Tom
51
голос
2
ответа
Я пытаюсь создать общий, чисто виртуальный класс Matrix, который поддерживает методы, возвращающие mew Matrix. Конечно, если один из этих методов используется в подклассе Matrix, он должен вернуть ...
6 лет, 2 месяца назад Martín Fixman
49
голосов
2
ответа
Этот фрагмент кода не соответствует. Компилятор напоминает мне, что: невозможно преобразовать из "списка инициализаторов" в " std::priority_queue<int, std::vector<_Ty, std::allocator<_Ty&g...
3 года, 6 месяцев назад iouvxz
60
голосов
1
ответ
Я пытаюсь создать metafunction, который скажет мне, может ли тип T использоваться в булевом контексте, то есть, является ли код подобным decltype(T) x = /* ... */; if (x) { /* ... */ } будет компил...
4 года, 2 месяца назад Taras
96
голосов
2
ответа
В С++ 98 я обычно использую следующее, чтобы объявить переменную в типе значения итератора: typename std::iterator_traits<Iterator>::value_type value; В С++ 11 у нас есть decltype, и я подума...
6 лет, 11 месяцев назад Glen Low
120
голосов
3
ответа
Я получил компиляцию ошибок ниже кода. struct B{ double operator()(){ return 1.0; } }; struct A { auto func() -> decltype(b()) { return b(); } B b; }; Однако, если я реорганизую A , он компилиру...
6 лет, 9 месяцев назад Sungmin
51
голос
1
ответ
Я прочитал этот вопрос, и это не помогает мне. Мой вопрос: почему я получаю ошибку времени выполнения при использовании функции сравнения для типа ключа для set как показано ниже? multiset<Phone...
4 года, 9 месяцев назад Andreas DM
114
голосов
2
ответа
Это продолжение вопроса: Что означает void() в decltype(void()) точно? . decltype(void()) компилируется отлично, а что означает void() в этом случае, объясняется в вышеупомянутом вопросе (фактическ...
3 года, 5 месяцев назад skypjack
50
голосов
2
ответа
VS2015 бросает много ошибок при попытке выполнить этот код: int a = 5; int *p = &a; std::vector<decltype(*p)> v; Однако, когда я проверяю тип, возвращаемый этим объявлением, я получаю int...
4 года, 4 месяца назад bottaio
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема