Форум программистов, компьютерный форум CyberForum.ru

Как определить наличие конструктора с заданными параметрами? - C++

Восстановить пароль Регистрация
 
O_Q
-12 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 53
21.06.2016, 09:48     Как определить наличие конструктора с заданными параметрами? #1
Есть шаблонный класс - обёртка вложенного объекта. Его задача: принимать объект формата JSON и передавать его в конструктор нашего объекта, если таковой имеется, иначе ничего не делать - наличие такого конструктора нужно определить на этапе компиляции. Также хочу сразу спросить, можно ли определять существование метода класса с заданным именем и нужными параметрами.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2016, 09:48     Как определить наличие конструктора с заданными параметрами?
Посмотрите здесь:

C++ Определить, попадает ли точка в закрашенные области с заданными параметрами.
Вызов конструктора с несколькими параметрами при использовании push_back() в vector'е C++
C++ error C2512: no appropriate default constructor available, несмотря на наличие конструктора по умолчанию
классы. ошибка при вызове конструктора с параметрами C++
пределить, попадает ли точка с координатами в закрашенные области с заданными параметрами C++
C++ Вызов функции с не заданными параметрами из объекта класса
Напечатать все члены полученной арифметической прогрессии с заданными параметрами и их сумму C++
C++ Можно ли построить башню с заданными параметрами?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
21.06.2016, 10:12     Как определить наличие конструктора с заданными параметрами? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
O_Q, std::is_constructible поможет.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
22.06.2016, 01:10     Как определить наличие конструктора с заданными параметрами? #3
Цитата Сообщение от O_Q Посмотреть сообщение
Также хочу сразу спросить, можно ли определять существование метода класса с заданным именем и нужными параметрами.
Если с учётом неявных преобразований аргументов и без учёта типа возвращаемого значения, то это можно относительно просто реализовать. Примерно так (с++11, и возможно я тут не учёл все нюансы):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <utility>
#include <type_traits>
 
 
template<typename...>
struct void_type {
 
   using type = void;   
};
 
template<typename ...T>
using void_t = typename void_type<T...>::type;
 
 
template<typename T, typename = void>
struct is_invokable_with_member_function_foo : std::false_type {};
 
template<typename T, typename ...Args>
struct is_invokable_with_member_function_foo<
      T (Args...)
    , void_t<decltype(std::declval<T>().foo(std::declval<Args>()...))>
> : std::true_type {};
http://ideone.com/hzRM78
Вот только надо писать подобное для каждого интересующего названия метода (или навернуть макрос для генерации).
Yandex
Объявления
22.06.2016, 01:10     Как определить наличие конструктора с заданными параметрами?
Ответ Создать тему
Опции темы

Текущее время: 03:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru