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

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

Войти
Регистрация
Восстановить пароль
 
Fox_Yo
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 86
#1

Шаблоны и Макросы С++ - C++

19.11.2014, 23:15. Просмотров 561. Ответов 6
Метки нет (Все метки)

Задание связанное с макросами и шаблонами, ни как не могу решить проблему.

Задание:

Макрос - Квадрат числа
Выражение - Квадрат суммы
Целый параметр - unsigned short
Действительный параметр - double

1. Описания открытой подпрограммы ( макроса ) согласно варианту ( табл.2.10 ) .
2. Описания шаблона, вычисляет значение выражения согласно варианту
( табл.24 ) . При вычислении выражения используется макрос .
3. Описания главной программы , которая состоит из:
- Описания и инициирования переменных целого и действительного типов согласно варианту
( табл.2.10 ) ;
- Использование шаблона с целыми параметрами ;
- Использование шаблона с действительными параметрами .

Код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "stdafx.h"
#define Kvad(x) (x*x)
 
template <typename Shab>
Shab KvadSum(Shab a, Shab b)
{
    return Kvad(a) + Kvad(b);
}
 
void main()
{
    unsigned short a = 3;
    double b = 5;
    KvadSum(a,b);
}
Выбивает ошибку: "error C2782: Shab KvadSum(Shab,Shab): в шаблон параметр "Shab" неоднозначен" и "отсутствуют экземпляры шаблон функции "KvadSum", соответствующие списку аргументов типы аргументов: (unsigned short, double)"
Помогите пожалуйста, очень буду благодарен.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2014, 23:15     Шаблоны и Макросы С++
Посмотрите здесь:

Шаблоны, макросы, размер массива - C++
Статья http://habrahabr.ru/company/pvs-studio/blog/119815/ Там есть такой код template &lt;typename T, size_t N&gt; char...

макросы - C++
#define EMPTY 0x00 #define ILLEGAL 0xF0 #define B_PRIVATE 0x01 // 1 бит - наличие #define W_PRIVATE 0x03 ...

макросы - C++
#include &lt;iostream&gt; using namespace std; #define printarray(x,y)//вывод массива x-имя массива, y-число элементов???? int main() ...

Макросы - C++
Здравствуйте, сделал программу, а мне еще сказали нужно сделать её с использованием макросов, знаю что это не долго и всё, не мог бы...

Макросы в С++ - C++
Доброго времени суток. Подскажите, где можно почитать про написание макросов для классов? У меня есть класс class Transition { ...

Макросы - C++
Ребята помогите!Надо переделать все пож макросы.Но в литературе как -то всё обрывками написано.непонятно как целиком программу писать! ...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
2399 / 1093 / 237
Регистрация: 30.11.2013
Сообщений: 3,620
19.11.2014, 23:20     Шаблоны и Макросы С++ #2
C++
1
#define Kvad(x) (x*x)
лучше
C++
1
#define Kvad(x) ((x)*(x))
Fox_Yo
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 86
19.11.2014, 23:24  [ТС]     Шаблоны и Макросы С++ #3
rikimaru2013, Все равно не пашет, там дело не в макросе, а в шаблоне. Но все равно спасибо за подсказку.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6421 / 3060 / 303
Регистрация: 04.12.2011
Сообщений: 8,342
Записей в блоге: 3
20.11.2014, 00:06     Шаблоны и Макросы С++ #4
Fox_Yo, компилятор не уверен хотите ли вы пару целых без знака (сужающее для double) или пару действительных (расширяющее для целого без знака)
можно:
C++
1
2
3
4
cout<<KvadSum(a,a);
cout<<KvadSum(b,b);
cout<<KvadSum((double)a, b);
cout<<KvadSum(a, static_cast<unsigned short>(b));//так лучше)
MrGluck
Модератор
Эксперт CЭксперт С++
6992 / 4163 / 594
Регистрация: 29.11.2010
Сообщений: 11,045
20.11.2014, 01:14     Шаблоны и Макросы С++ #5
По традиции макросы пишут заглавными буквами.

Добавлено через 54 секунды
Вроде по русски написано - не может определить какой тип должен получиться в итоге.
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3641 / 1916 / 505
Регистрация: 18.10.2014
Сообщений: 3,480
20.11.2014, 07:16     Шаблоны и Макросы С++ #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Fox_Yo Посмотреть сообщение
Выбивает ошибку
Если вы хотите иметь возможность вызывать ваш шаблон с разными типами аргументов, то надо предоставить шаблону эту свободу

C++
1
2
3
4
5
template <typename T, typename U>
<какой-то тип> KvadSum(T a, U b)
{
  return Kvad(a) + Kvad(b);
}
Но тут сразу возникает вопрос - как правильно указать тип возврата. В С++11 это несложно

C++
1
2
3
4
5
template <typename T, typename U>
auto KvadSum(T a, U b) -> decltype(a + b)
{
  return Kvad(a) + Kvad(b);
}
или

C++
1
2
3
4
5
template <typename T, typename U>
decltype(T(0) + U(0)) KvadSum(T a, U b)
{
  return Kvad(a) + Kvad(b);
}
или

C++
1
2
3
4
5
template <typename T, typename U>
typename std::common_type<T, U>::type KvadSum(T a, U b)
{
  return Kvad(a) + Kvad(b);
}
а вот без С++11 все будет несколько сложнее, но тоже решаемо (придется вручную реализовать аналог 'std::common_type').
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2014, 09:35     Шаблоны и Макросы С++
Еще ссылки по теме:

Макросы - C++
Написать макрос находящий большое из 4 чисел в студии с++

Макросы в enum? - C++
Есть макросы #define angles (1&lt;&lt;0) #define v_angle (1&lt;&lt;1) #define punchangle (1&lt;&lt;2) Можно сделать типа такого: ? enum (...

макросы рвут - C++
Здравствуйте, надоело писать вручную условия #ifndef есть код: #define _DEF(sym) sym~define #define _IFNDEF(sym) sym~ifndef #define...

Вложенные макросы - C++
Добрый день. Есть такой макрос: #define QW_QWERTY(data) int testvar = data; #define HELPER2(MACROS, ...) QW_##MACROS __VA_ARGS__ ...

Предопределённые макросы - C++
Всем привет! Скажите кто знает как объяснить компилятору что он работает в Linux или Win32? Я слышал что есть предопределенные макросы, но...


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

Или воспользуйтесь поиском по форуму:
Fox_Yo
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 86
20.11.2014, 09:35  [ТС]     Шаблоны и Макросы С++ #7
TheCalligrapher, Спасибо всем, особенно вам, помогли.
Yandex
Объявления
20.11.2014, 09:35     Шаблоны и Макросы С++
Ответ Создать тему
Опции темы

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