Вывести типы возврата и параметров из указателя метода класса [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Вывести типы возврата и параметров из указателя метода класса [дубликат]

Сообщение Anonymous »

Использование VS2022. Как говорится в заголовке, я пытаюсь вывести типы возврата и параметров указателя метода. У меня есть решение, которое работает с довольно неудачными деталями, что если я отправлю указатель на функцию, определенные вещи больше не работают. В частности, типы аргументов больше не могут быть выведены, а тип возврата больше нельзя использовать в качестве константа .

Код: Выделить всё

#include 
#include 

struct testStruct {
double testMethod(int, float)
{
return {};
}
};

template
struct function_properties;
template
struct function_properties {
using return_type = R;
template
struct parameter {
using type = std::tuple_element::type;
};
};

void testFunction(auto method_ptr, auto& structObj) {
typename function_properties::return_type var_0{};                // Properly deduces double.
typename function_properties::parameter::type var_1{};         // Fails to deduce int.

if constexpr (std::is_same_v) // Fails to evaluate at compile time; "is not a valid template type argument for parameter"
{
}

auto memFn = std::mem_fn(method_ptr);
if constexpr (std::is_same_v)        // Properly evaluated at compile time.
{
}
}

int main()
{
testStruct structObj;
auto method_ptr = &testStruct::testMethod;
typename function_properties::return_type var_0{};                // Properly deduces double.
typename function_properties::parameter::type var_1{};     // Properly deduces int.

if constexpr (std::is_same_v) // Properly evaluated at compile time.
{
}

testFunction(method_ptr, structObj);
return 0;
}
< /code>
Как видите, код в основной функции работает, как и ожидалось, но в функции, а не. Заинтересован в том, что std :: mem_fn 
способен вывести тип возврата и использовать его в контексте contexpr, но я в недоумении в том, как сделать это сам.

Подробнее здесь: https://stackoverflow.com/questions/797 ... od-pointer
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»