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

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

08.09.2016, 19:40. Показов 1018. Ответов 3

В старом с++ билдере такое работало, новый clang ругается.
C++
1
2
3
4
5
template <class T, const IID* piid = &__uuidof(T)>
class CComQIPtr
{
..
}
Как по другому можно задать дефолтное значение, если его можно получить только функцией? Конечно же я не хочу менять обращения к CComQIPtr, которые раньше работали..
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2016, 19:40
Ответы с готовыми решениями:

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

Как вывести результат функции void через cout? Или передавать в функцию параметр типа string?
class tomat : public cveti { public: int ves = (rand() % 599 + 1); string an; void print()...

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

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

3
15349 / 8297 / 2014
Регистрация: 30.01.2014
Сообщений: 14,167
08.09.2016, 20:22 2
Цитата Сообщение от LetoLetoD Посмотреть сообщение
В старом с++ билдере такое работало
Поздравляю, ты стал жертвой использования непереносимого(нестандартного) расширения компилятора.

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

Добавлено через 27 минут
Вообще, судя по этому: https://github.com/avakar/clan... nsions.cpp поддержка этих расширений в компиляторе присутствует - остается вопрос - с какой версии.
Возможно в версии в поставке embarcadero этих возможностей еще нет. Я наткнулся на внушительное количество багрепортов по этому поводу.
В любом случае, я бы запустил этот пример с указанными параметрами командной строки твоего clang. Если соберет, значит дело лишь в настройке среды.
1
5 / 5 / 6
Регистрация: 24.01.2016
Сообщений: 67
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
15349 / 8297 / 2014
Регистрация: 30.01.2014
Сообщений: 14,167
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2016, 12:52

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

Почему изменение параметра шаблона при вызове функции даёт неверный результат?
Есть такой код: #include &lt;opencv2/highgui/highgui.hpp&gt; #include...

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru