Захотелось странного, опущу контекст.
Нужно написать функцию, которая вызовет метод класса и вернёт результат этого метода. Пробую:
(Студия падает на таком)
#include <type_traits>
#include <iostream>
template <typename T, typename M, typename ...Args>
auto invoke( T *object, M method, Args&&... args ) -> decltype( *method )
{
return ( static_cast<T*>( object )->*method )( std::forward<Args>( args )... );
}
struct Foo
{
int triple( int val )
{
return val * 3;
}
};
int main()
{
Foo foo;
std::cout << invoke( &foo, &Foo::triple, 5 ); // output: 15return 0;
}
Здравствуйте, SaZ, Вы писали:
SaZ>Захотелось странного, опущу контекст. SaZ>Нужно написать функцию, которая вызовет метод класса и вернёт результат этого метода. Пробую:
... SaZ>Собственно, вопросы: 1) куда написать багрепорт, 2) как объявить функцию invoke
Похоже, вы изобретаете std::invoke которая планируется в С++17.
Implementability
Proposed invoke function template may be implemented in terms of existing C++11 standard library components:
Здравствуйте, SaZ, Вы писали:
SaZ>Коллеги, так а куда нужно отправлять багрепорт по поводу internal compiler error? Через connect.microsoft.com мне почему-то не даёт.
Через Visual Studio Feedback Center. Но чтобы отправить багрепорт, необходимо войти в учетную запись Microsoft.
SaZ>Нужно написать функцию, которая вызовет метод класса и вернёт результат этого метода. Пробую: SaZ>(Студия падает на таком) SaZ>
Здравствуйте, Constructor, Вы писали:
C>Через Visual Studio Feedback Center. Но чтобы отправить багрепорт, необходимо войти в учетную запись Microsoft.
Зашёл под своей учёткой, которая с msdn подпиской (по BizSpark)
You are not authorized to submit the feedback for this connection.
Спасибо, зарегистрировался в connect и связал его со своей учёткой.
Вот это, кстати, лишнее и неправильное. Хотя, конечно, internal compiler error быть не должно.
-> decltype( *method )
Здравствуйте, SaZ, Вы писали:
SaZ>Багрепорт: https://connect.microsoft.com/VisualStudio/Feedback/Details/1756242
SaZ>Захотелось странного, опущу контекст. SaZ>Нужно написать функцию, которая вызовет метод класса и вернёт результат этого метода. Пробую: SaZ>(Студия падает на таком)
Здравствуйте, swingus, Вы писали:
S>Вот это, кстати, лишнее и неправильное S>...
Да, спасибо, я уже знаю. Я пока только осваиваю всю прелесть последних стандартов. Если есть какие-либо хорошие статьи (помимо справки на cppreference) по rvalue references и выводу типов, буду благодарен.
Здравствуйте, SaZ, Вы писали:
SaZ>Да, спасибо, я уже знаю. Я пока только осваиваю всю прелесть последних стандартов. Если есть какие-либо хорошие статьи (помимо справки на cppreference) по rvalue references и выводу типов, буду благодарен.