У меня проблема с шаблоном. Когда я создаю экземпляр класса в стеке, он работает. Когда я создаю экземпляр одного класса в куче, он терпит неудачу. (аргумент дедукции) Я не понимаю, почему...
Информация: Я использую gcc 7.2.0 с С++ 17.
вот пример:
#include <iostream>
#include <cstdlib>
#include <memory>
template <class ReturnType, class ClassName, class... Args>
class MethodPtr
{
public:
typedef ReturnType (ClassName::*Method)(Args...);
MethodPtr(ClassName* ptr, Method m) : _p(ptr), _m(m)
{
(ptr->*m)(4);
}
ClassName* _p;
Method _m;
};
class Example
{
public:
Example()
{
dotest(this, &Example::func);
}
template <class Ptr, class Func>
void dotest(Ptr ptr, Func func)
{
// works
MethodPtr(ptr, func);
// don't works
//std::make_unique<MethodPtr>(ptr, func);
//new MethodPtr(ptr, func);
//works
std::make_unique<decltype(MethodPtr(ptr, func))>(ptr, func);
new decltype(MethodPtr(ptr, func))(ptr, func);
}
void func(int i)
{
std::cout << i << std::endl;
}
};
int main()
{
Example example;
}
У вас есть решение избежать decltype?
Спасибо,