ФлеймФорумПрограммирование

Вопросы по C++ (12 стр)

Страницы: 18 9 10 11 12 13 Следующая »
#165
23:55, 13 сен 2025

Aroch
> Ты меняешь тип и ожидаешь что плюсы вдруг станут не строго типизированным языком.

В С++ есть автоматическое приведение типов. Например, туда, где требуется std::string, можно подставить просто строковой литерал - и при вызове автоматически будет вызван конструктор string из const char* (при этом сам строковой литерал имеет тип не string и даже не const char* , а const char[SIZE]).

То есть, типы подставляемых аргументов не обязаны точно соответствовать сигнатуре, и это несоответствие может вылезать в обсуждаемом выше вариадик-шаблоне.

#166
3:15, 14 сен 2025

Dmitry_Milk
> есть автоматическое приведение типов
его должен кто-то написать. Ты собрался для всех пользовательских типов их прописывать если уж зашла речь про winapi'шные функции?
> Мне надо, чтоб выводился от сигнатуры указателя, переданного параметром шаблона, а он выводится из типов значений, которые подставили в качестве аргументов - #145.
у тебя в параметр шаблона не передается никакой указатель. Параметр шаблона не оперирует значениями кроме чисел и строк, все остальное типы. Сигнатура функции это тоже тип. Если ты хочешь из нее получить типы аргументов, то придется написать еще вспомогательных шаблонов.

#167
5:42, 14 сен 2025

Dmitry_Milk
> Мне надо, чтоб выводился от сигнатуры указателя, переданного параметром шаблона
ЫЫ предлагает такой вариант, вроде работает:

template<typename F, typename = void>
struct function_traits;

template<typename R, typename ... A>
struct function_traits<R(*)(A...)> {
    using return_type = R;
    using args_type = std::tuple<A...>;
    template<std::size_t N> using arg = std::tuple_element_t<N, args_type>;
};

template<auto F> struct Test  // Пример использования
{
    typename function_traits<decltype(F)>::return_type val;
};
#168
12:25, 14 сен 2025

Aroch
> у тебя в параметр шаблона не передается никакой указатель

??? А что у меня туда передается, когда я делаю, например, так

myinvoke<CreateFileA>(аргументы)

?

Aroch
> Параметр шаблона не оперирует значениями кроме чисел и строк, все остальное типы.

Помимо чисел и строк non-type параметрами шаблонов могут быть и указатели, в том числе и указатели на функции, главное, чтоб адрес был известен в компайлтайме. Это можно наверное даже и в С++11, а уж в современных версиях С++ (вроде бы начиная с С++ 20) там еще всякого добавилось:

https://en.cppreference.com/w/cpp/language/template_parameters.html - посмотри, что там можно в Constant template parameter

#169
12:25, 14 сен 2025

}:+()___ [Smile], мда, мудрено накручено...

#170
12:37, 14 сен 2025

Dmitry_Milk
> https://en.cpprefere… rameters.html - посмотри, что там можно в Constant template parameter
посмотри, везде слово type.
> ??? А что у меня туда передается, когда я делаю, например, так
а ты думаешь что? Значение указателя на функцию? :) Что передается уже выше писал.

#171
13:43, 14 сен 2025

Aroch
> посмотри, везде слово type

Да, и это не слово typename. Про типы говорится во второй части Type template parameter, а в первой части, в Constant template parameter рассказывается именно про non-type, то есть, например, про int x, double y, char name[SIZE] и в том числе и, например, про void (*func_pointer)().

#172
(Правка: 14:22) 14:15, 14 сен 2025

Dmitry_Milk
> в Constant template parameter рассказывается именно про non-type
это особенность терминологии, когда они решили константные параметры таким образом выделить. Это всё ещё не значения.
И кстати в 26 стандарте они таки изменили это терминологию и теперь их так и называют, константные параметры.

#173
14:25, 14 сен 2025

Aroch
> Это всё ещё не значения

Их можно  использовать в выражениях, как в компайлтайме, так и в рантайме - использовать арифметику над числами, брать/сравнивать символы из строк и массивов, разадресовывать указатели и вызывать функции по указателям.

#174
14:31, 14 сен 2025

Dmitry_Milk
> разадресовывать указатели и вызывать функции по указателям.
речь про то что у тебя в auto, а не то что поcле auto. Компилятор сигнатуру твоей функции берет откуда по твоему? Из адреса?

#175
14:47, 14 сен 2025

Aroch
> Компилятор сигнатуру твоей функции берет откуда по твоему? Из адреса?

Нет конечно, компилятор эту сигнатуру сам знает в том месте, где конкретной функцией инстанциируется шаблон - в том месте сигнатура функции должна быть компилятору известна. Соответственно, шаблон инстанциируется как конкретной сигнатурой, так и конкретным адресом функции.

#176
15:11, 14 сен 2025

Dmitry_Milk
ну и какая сигнатура для перегруженной функции?

#177
15:29, 14 сен 2025

Aroch, та, которую укажешь явным приведением типа в месте инстанциирования. Зачем ты снова возвращаешься к перегруженным функциям? Мой вопрос был не про перегруженные функции, а про про то, чтоб пакет типов выводился из сигнатуры обычной функции. Если она обычная, не перегруженная - это возможно, и как конкретно - вот выше показал Смайл.

#178
16:00, 14 сен 2025

Dmitry_Milk
> чтоб пакет типов выводился из сигнатуры обычной функции.
по мне это является миной замедленного действия. В частных случаях ты сам можешь привести к нужному типу при вызове.

#179
22:31, 16 сен 2025

Dmitry_Milk
> Можно, конечно сделать так
Можно из буханки сделать троллейбус ;) Какой смысл в этой конструкции, если вместо нее всегда можно напрямую вызвать pointer с соответствующим набором параметров?

Не, ну если цель обфусцировать код или выстрелить бывшим коллегам в ногу напоследок, то идея хорошая, базара нет.

Страницы: 18 9 10 11 12 13 Следующая »
ФлеймФорумПрограммирование