30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
|||||||||||
1 | |||||||||||
Как узнать количество аргументов конструктора?13.02.2015, 15:33. Показов 3692. Ответов 46
Метки нет (Все метки)
Добрый день.
Как на этапе компиляции узнать, сколько аргументов имеет конструктор некоторого класса? Нужно в шаблонной функции по переданному классу Type определить количество: 1. Если аргументов 1 шт, то
0
|
13.02.2015, 15:33 | |
Ответы с готовыми решениями:
46
Как узнать количество аргументов в команде/строке? Узнать количество пеледаваемых в функцию аргументов Ошибка в списке аргументов конструктора Неправильная передача аргументов конструктора класса |
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
||||||
14.02.2015, 15:56 | 41 | |||||
ну подозреваю что он говорит о том, что у Type нет конструктора, который принимает два или один параметр. зависит от Тype. Тут надо делать вызывать специальные create функции, которые либо перегружены, либо специализированы. В посте #6 они уже были:
параметр db просто игнорировать.
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
||||||
14.02.2015, 15:58 | 42 | |||||
Если у одного из этих классов, например нет конструктора с двумя параметрами, то будет ошибка. Т.к. тернарный оператор требует вычислимости обоих свох выражений (как if, так и else). Обойти это можно так:
1
|
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
||||||
14.02.2015, 21:50 [ТС] | 43 | |||||
Спасибо, заработало!
Попытался их использовать:
0
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
15.02.2015, 00:31 | 44 |
наверно потому, что результат
bool2type<std::is_constructible<T, QWidget>::value всегда false. вместо T тут надо тип объекта _db поставить наверно bool2type<std::is_constructible<decltype(_db), QWidget>::value
0
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
||||||
15.02.2015, 10:58 | 45 | |||||
Воу-воу-воу, что как-то у вас все сложно. Можно ж sfinae замутить через автовывод возвращаемого типа. Т.е.:
Пололлировал с предложения впилить runtime полиморфизм не смотря на то, что все известно в compile-time. Вот что с людьми MFC делает
3
|
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
|
16.02.2015, 09:04 [ТС] | 46 |
Лаконично.
Вопрос: 1. Как сделать, чтобы make() возвращал указатель (т.е. new T(_db, ui->tabWidget) или new T(ui->tabWidget))? 2. Можно ли избавиться от аргументов в функции make()? Те переменные, которые передаются в конструктор класса имеют глобальную область видимости.
0
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
||||||
16.02.2015, 12:48 | 47 | |||||
Элементарно
1
|
16.02.2015, 12:48 | |
16.02.2015, 12:48 | |
Помогаю со студенческими работами здесь
47
Изменение параметров конструктора без аргументов Как узнать имя конструктора объекта Три конструктора с разным количеством аргументов, какой использовать? Странное расположение в памяти аргументов функции с неизвестным количество аргументов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |