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

Объявить аргументы по шаблону - C++

Восстановить пароль Регистрация
 
 
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
28.09.2013, 20:53     Объявить аргументы по шаблону #1
Доброго времени суток
Задача весьма расплывчатая: нужно объявить функцию, или указатель на нее шаблоном

Цель - вызвать эту функцию с проверкой аргументов:

C++
1
2
3
4
5
6
7
8
9
10
11
12
int f1(int a)
{
 return -a;
}
//...
template<typename retType, ARGS>
retType Func(PVOID Fn, ARGS)
{
  return  Fn(ARGS);
}
//..
Func(f1, 42);
(пример некорректный)
Мне нужен рабочий вариант или аналог
Наличие подсказки аргументов обязательно, т.е. макросы или inline-asm не подходит

Собственно задумка в том, чтобы данная функция находилась в классе, а при его инициализации передавалась ссылка на функцию, чтобы в дальнейшем была возможность вызвать функцию из класса с проверкой аргументов переданной функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
28.09.2013, 22:46  [ТС]     Объявить аргументы по шаблону #21
Цитата Сообщение от castaway Посмотреть сообщение
Такой синтаксис параметров в GCC, подозреваю что в MSVC он другой.
Нагуглил следующее:
AFAIR it's enabled by default.

It isn't, however, complete. For example you use initialiser lists which it lacks support for at the moment.

See the table here msdn.microsoft.com/en-gb/library/vstudio/hh567368.aspx for the status of C++11 features in both VS2010 and VS2012.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
28.09.2013, 22:47     Объявить аргументы по шаблону #22
Цитата Сообщение от castaway Посмотреть сообщение
Такой синтаксис параметров в GCC, подозреваю что в MSVC он другой.
подозреваю, что та студия не поддерживает variadic template'ы
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
28.09.2013, 22:48     Объявить аргументы по шаблону #23
Насколько мне известно, в Visual Studio 2012 реализованы не все возможности стандарта С++11, хотя могу и ошибаться..
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
28.09.2013, 22:49     Объявить аргументы по шаблону #24
h3mbr0, еще так можно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int sum(int a, int b)
{
    return a + b;
}
 
template <class Function>
class Foo
{
public:
    Foo(Function f)
        : func(f) {}
 
    Function func;
};
 
int main()
{
    std::cout << Foo<int(*)(int, int)>(sum).func(42, 42);
    return 0;
}
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
28.09.2013, 22:49  [ТС]     Объявить аргументы по шаблону #25
Цитата Сообщение от castaway Посмотреть сообщение
Насколько мне известно, в Visual Studio 2012 реализованы не все возможности стандарта С++11, хотя могу и ошибаться..
Я ведь об этом и писал...
И действительно
Variadic templates v0.9, v1.0 - No - No

Жалко(

Всем спасибо за помощь, придется обходится макросами с костылями)
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
28.09.2013, 22:50     Объявить аргументы по шаблону #26
Olivеr, в первом посте речь шла о проверке аргументов же
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
28.09.2013, 22:50  [ТС]     Объявить аргументы по шаблону #27
Цитата Сообщение от Olivеr Посмотреть сообщение
h3mbr0, еще так можно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int sum(int a, int b)
{
    return a + b;
}
 
template <class Function>
class Foo
{
public:
    Foo(Function f)
        : func(f) {}
 
    Function func;
};
 
int main()
{
    std::cout << Foo<int(*)(int, int)>(sum).func(42, 42);
    return 0;
}
Блин, а раньше нельзя было об этом?)
У меня почему-то возникала ошибка преобразования int(*)(int, int) в int(int,int)
Видимо, не так вызывал

Спасибо еще раз, буду пробовать
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
28.09.2013, 22:52     Объявить аргументы по шаблону #28
Цитата Сообщение от alex_x_x Посмотреть сообщение
Olivеr, в первом посте речь шла о проверке аргументов же
ТС еще вот это попросил
Объявить аргументы по шаблону
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
28.09.2013, 22:52     Объявить аргументы по шаблону #29
h3mbr0, чет я не пойму - как это связано с
Цитата Сообщение от h3mbr0 Посмотреть сообщение
чтобы в дальнейшем была возможность вызвать функцию из класса с проверкой аргументов переданной функции
Добавлено через 16 секунд
Olivеr, а, ок
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.09.2013, 22:53     Объявить аргументы по шаблону #30
h3mbr0, к 12-й студии есть три апдейта и Visual C++ Compiler November 2012 CTP
После установки в опциях проекта поменя тулсет на CTP
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2013, 22:55     Объявить аргументы по шаблону
Еще ссылки по теме:

C++ Поиск по шаблону
Проверка ввода по шаблону C++
Создать матрицу по заданному шаблону C++

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

Или воспользуйтесь поиском по форуму:
h3mbr0
8 / 8 / 0
Регистрация: 12.03.2012
Сообщений: 125
28.09.2013, 22:55  [ТС]     Объявить аргументы по шаблону #31
Цитата Сообщение от alex_x_x Посмотреть сообщение
h3mbr0, чет я не пойму - как это связано с


Добавлено через 16 секунд
Olivеr, а, ок
Для меня не было принципиальным функция это или указатель на нее, важен был факт что будет присутствовать проверка)

Цитата Сообщение от Jupiter Посмотреть сообщение
h3mbr0, к 12-й студии есть три апдейта и Visual C++ Compiler November 2012 CTP
Первый раз слышу о таком, благодарю
Yandex
Объявления
28.09.2013, 22:55     Объявить аргументы по шаблону
Ответ Создать тему
Опции темы

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