Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
LetoLetoD
2 / 2 / 3
Регистрация: 24.01.2016
Сообщений: 59
#1

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

08.09.2016, 19:40. Просмотров 198. Ответов 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++):

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

Как вернуть значение результат работы функции в переменную? - C++
Как вернуть значение результат работы функции в переменную? К примеру { URLDownloadTofile(1,2,3,4) } Возвращенное значение вернуть...

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

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

Передать шаблонный класс, как параметр шаблона - C++
нужно не используя stl написать аналог класса list. написал болванку и застрял template&lt;class C&gt; class node{ protected: C *_next; ...

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

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

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

Добавлено через 27 минут
Вообще, судя по этому: https://github.com/avakar/clang/blob...Extensions.cpp поддержка этих расширений в компиляторе присутствует - остается вопрос - с какой версии.
Возможно в версии в поставке embarcadero этих возможностей еще нет. Я наткнулся на внушительное количество багрепортов по этому поводу.
В любом случае, я бы запустил этот пример с указанными параметрами командной строки твоего clang. Если соберет, значит дело лишь в настройке среды.
1
LetoLetoD
2 / 2 / 3
Регистрация: 24.01.2016
Сообщений: 59
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
7387 / 4464 / 1013
Регистрация: 30.01.2014
Сообщений: 7,317
09.09.2016, 12:52 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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
09.09.2016, 12:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2016, 12:52
Привет! Вот еще темы с ответами:

Указатель на статический массив как параметр шаблона - C++
Добрый день. Необходимо параметр шаблона сделать указателем и передавать в него указатель на статический массив: template&lt;size_t...

Кортеж с абстрактным типом как параметр шаблона + smart_ptr - C++
Имеем кортеж (std::tuple) с абстрактным типом, параметризуем этим шаблон класса, экземпляров кортежа нигде не создаём. Создаём экземпляры...

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

Параметр шаблона класса как собственный тип данных - C++
Приветствую. Такой вопрос: как перегрузить операторы класса-шаблона, где в качестве аргумента шаблона выступает собственный тип данных....


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

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

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