Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
LetoLetoD
5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 65
#1

Результат работы функции как параметр шаблона - C++

08.09.2016, 19:40. Просмотров 210. Ответов 3

В старом с++ билдере такое работало, новый clang ругается.
C++
1
2
3
4
5
template <class T, const IID* piid = &__uuidof(T)>
class CComQIPtr
{
..
}
Как по другому можно задать дефолтное значение, если его можно получить только функцией? Конечно же я не хочу менять обращения к CComQIPtr, которые раньше работали..
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2016, 19:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Результат работы функции как параметр шаблона (C++):

Передача функции как параметр шаблона
Хочу передавать в шаблон любую функцию без параметров и вызывать ее из него....

Как вернуть значение результат работы функции в переменную?
Как вернуть значение результат работы функции в переменную? К примеру {...

Свой тип как параметр шаблона
Есть вопрос по коду: #include &lt;iostream&gt; #include &lt;memory&gt; #include &lt;vector&gt;...

Шаблоннный клас как параметр шаблона
Если в кратце: Имеется такой код: typedef ByteStuffing&lt;USART0,...

Передать шаблонный класс, как параметр шаблона
нужно не используя stl написать аналог класса list. написал болванку и застрял...

Как можно изменить параметр шаблона (template)?
есть такие классы: class abstract { public: virtual int method() = 0; //...

3
DrOffset
7518 / 4514 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
08.09.2016, 20:22 #2
Цитата Сообщение от LetoLetoD Посмотреть сообщение
В старом с++ билдере такое работало
Поздравляю, ты стал жертвой использования непереносимого(нестандартного) расширения компилятора.

Цитата Сообщение от LetoLetoD Посмотреть сообщение
Как по другому можно задать дефолтное значение, если его можно получить только функцией?
А можно чуть подробнее про семантику этого второго параметра?
Что он делает?

Добавлено через 27 минут
Вообще, судя по этому: https://github.com/avakar/clang/blob...Extensions.cpp поддержка этих расширений в компиляторе присутствует - остается вопрос - с какой версии.
Возможно в версии в поставке embarcadero этих возможностей еще нет. Я наткнулся на внушительное количество багрепортов по этому поводу.
В любом случае, я бы запустил этот пример с указанными параметрами командной строки твоего clang. Если соберет, значит дело лишь в настройке среды.
1
LetoLetoD
5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 65
09.09.2016, 12:35  [ТС] #3
С ключами поигрался, но что-то не получилось (возможно руки кривые), сделал так:
C++
1
2
3
4
5
6
7
template <class T, const IID* piid2 = reinterpret_cast<IID*>(NULL)>
class CComQIPtr
{
private:
   IID* piid;
...
}
И в каждом конструкторе CComQIPtr добавил:
C++
1
2
3
4
if (piid2 == NULL)
   piid = &__uuidof(T);
else
   piid = piid2;
Проект собрался, но будет ли работать так же не знаю.
0
DrOffset
7518 / 4514 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
09.09.2016, 12:52 #4
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

Цитата Сообщение от LetoLetoD Посмотреть сообщение
И в каждом конструкторе CComQIPtr добавил:
Лучше тогда сделать так:
C++
1
2
3
4
5
6
7
8
9
10
template <class T>
class CComQIPtr
{
private:
   static const IID* piid;
...
};
 
template <class T>
const IID* CComQIPtr::piid = &__uuidof(T);
В конструкторах ничего писать не надо. Идеологически это будет соответствовать тому, что было изначально.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2016, 12:52
Привет! Вот еще темы с решениями:

Указатель на статический массив как параметр шаблона
Добрый день. Необходимо параметр шаблона сделать указателем и передавать в...

Зачем нужен шаблон как параметр шаблона?
Видел много примеров, но что-то не особо понятно зачем и как это работает.

Кортеж с абстрактным типом как параметр шаблона + smart_ptr
Имеем кортеж (std::tuple) с абстрактным типом, параметризуем этим шаблон...

Ссылка как параметр шаблона. Что это значит?
Увидел в данной теме http://www.cyberforum.ru/cpp-beginners/thread1900008.html...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru