Я хочу, чтобы мой Wrapper был короче.
Я не хочу включать decltype(foo)
дважды в каждой строке
Как правильно использовать конструктор для быть в состоянии вызвать _foo2, как я пытаюсь.
class Helper {
public:
Helper(LPCTSTR filename) : _filename(filename) {}
~Helper() { }
template<typename T>
T CallFunction() {
return T();
}
private:
LPCTSTR _filename;
};
template<typename T> class WrapFuncObj;
template<typename T, typename... Args>
class WrapFuncObj<T(Args...)> {
public:
WrapFuncObj(Helper* dll, LPCTSTR func) : _dll(dll), _func(func) {}
T operator()(Args&&... args) {
return _dll->CallFunction<T>();
}
private:
Helper* _dll;
LPCTSTR _func;
};
class Export {
Helper _dll{ L"SayHello.dll" };
public:
WrapFuncObj<decltype(foo)> _foo = WrapFuncObj<decltype(foo)>(&_dll, L"foo"); // works
WrapFuncObj<decltype(foo)> _foo2 = WrapFuncObj(&_dll, L"foo"); // problem here
};